iOS AVFoundation

news/2024/11/8 17:07:00/

AVFoundation

AVPlayer

AVPlayer是一个控制器对象,用于管理媒体资源。AVPlayer基于本地文件或远程文件媒体播放。AVPlayer用于一次播放单个媒体资源,可以使用replaceCurrentItem(with:)方法重用播放器实例来播放气体媒体资源,但同一个时刻只能管理一个媒体资源,使用AVQueuePlayer来创建和管理媒体播放的队列。

AVPlayer是一个动态变化的对象,有两种方式来观察播放器实例的状态:

  • 一般状态观察:你可以使用Key-Value observing(KVO)模式来观察属性的动态变化(如当前播放Item或者播放速度)。你应当在主线程中注册或者注销KVO。
  • 定时状态观察:提供两种观察时间变化的方法。addPeriodicTimeObserver(forInterval:queue:using:) addBoundaryTimeObserver(forTimes:queue:using:)分别定期、按边界观察时间变化。发生更改时,调用方法提供的闭包或者回调块,可以采取播放器用户界面的更新。

AVPlayerAVPlayerItem都是非可视对象,意味着无法直接在屏幕上显示媒体视频,有两种方法可以在屏幕上显示视频:

  • AVKit 最好的展示视频内容的方法使用是AVKit框架下的AVPlayerViewController类在 iOS、tvOS,或者AVPlayerView在macOS中,这些类提供一个全面完整的播放体验。
  • AVPlayerLayer 可以将AVPlayerLayer添加到视图的layer层view.layer.addSublayer(AVPlayerLayer)中。与AVPlayerView和AVPlayerViewController不同,播放器层不显示任何播放控件,仅仅在屏幕上显示视觉内容。你可以自行构建播放传输控件,以播放,暂停和搜索媒体。

AVPlayerItem

AVPlayerItem提供了AVPlayer播放需要的媒体文件,时间、状态、文件大小等信息,是AVPlayer媒体文件的模型对象。

Example

实现类似Spotify的视频背景界面的效果。

  • 创建AVPlayer并与视频资源建立连接
  • 通过AVPlayerLayer将AVPlayer与view的layer层连接
  • 添加通知监听,监听视频播放进度,实现循环播放
import UIKit
import AVFoundation
import AVKitclass ViewController: UIViewController {lazy var player: AVPlayer = {let string = Bundle.main.path(forResource: "moments", ofType: "mp4")let url = URL(fileURLWithPath: string!)let player = AVPlayer(url: url)return player}()lazy var playerLayer: AVPlayerLayer = {let playerLayer = AVPlayerLayer(player: self.player)playerLayer.frame = UIScreen.main.boundsplayerLayer.player?.play()return playerLayer}()override func viewDidLoad() {super.viewDidLoad()setupView()}func setupView() {self.view.layer.addSublayer(playerLayer)//通知监听NotificationCenter.default.addObserver(self, selector: #selector(didFinishedPlay(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem)}//实现循环播放@objc func didFinishedPlay(notification: Notification) {if let playerItem = notification.object as? AVPlayerItem {//改变AVPlayerItem状态模型对象的时间playerItem.seek(to: CMTime.zero, completionHandler: nil)player.play()}}
}

http://www.ppmy.cn/news/428323.html

相关文章

AVFoundation–简介

AVFoundation是很多处理基于时间的音视频文件的框架之一。你可以用它来检查,创建,编辑或者对媒体文件重编码。可以从设备中得到输入流,以及在实时捕捉和播放的时候对视频进行处理。 如果你仅仅需要播放视频,在IOS上你可以使用Medi…

[AV1] AV1 Reference Software

返回目录 AV1 Reference Software 版本发布(官方Tag) 版本发布日期v0.1.02017-06-09v1.0.02018-06-25v1.0.0-errata12019-01-18v2.0.02020-05-18v3.0.02021-03-23 软件下载 Libav1的下载地址在谷歌的服务器上,国内需要科学上网才能访问得…

数字IC设计 - 数字集成电路基础

MOS管结构以及工作原理 MOS管结构图 MOS管是金属(metal)—氧化物(oxide)—半导体(semiconductor)场效应晶体管,或者称是金属—绝缘体(insulator)—半导体。MOS管的sour…

Mock和Vite-plugin-Mock的区别是什么?

简介 我不知道大家和我是否有一样的疑问,之前Mock.js用的挺好,为啥又出现了一个vite-plugin-mock,而且这个插件还依赖于Mock.js.那么他的优势到底是什么呢?如果你也有这样的疑问,本文最后会给出答案解开这个谜底 前言 我之前已经…

Mybatis持久层框架 | Lombok搭建

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Lombok Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要…

SF授权系统源码 V3.7全开源无加密版本

🎉 有需要的朋友记得关赞评,文章底部来交流!!! 🎉 ✨ 源码介绍 2023全新SF授权系统源码 V3.7全开源无加密版本。网站搭建很简单,大致看来一下应该域名解析后上传源码解压,访问域名/i…

【微服务架构设计和实现】4.3 服务之间的通信和API设计

第一章:【云原生概念和技术】 第二章:【容器化应用程序设计和开发】 第三章:【基于容器的部署、管理和扩展】 第四章:【4.1 微服务架构概述和设计原则】 第四章:【4.2 服务边界的定义和划分】 4.3 服务之间的通信和…

有哪些音质比较好的蓝牙耳机可以推荐?高音质真无线蓝牙耳机榜

不知道大家有没有这种感觉,有线耳机打结解不开会让人很绝望,现在这种情况也离我们越来越远。借助蓝牙技术的发展,真无线蓝牙耳机正在疯狂的涌入市场。蓝牙耳机以小巧便于携带,又具有个性特点吸引着无数人的眼光。现在我就为大家推…