使用AVPlayer
对象可以用来控制asset的播放。在播放期间,你可以使用AVPlayerItem实例来asset的presentation state。并且一个AVPlayerItemTrack
对象可以管理某个独立track的展示状态。展示一个视频,你可以使用AVPlayerLayer
对象。
播放Assets
一个player是一个控制器对象,你可以使用它来管理一个asset的播放,比如,开始和停止播放以及寻找特殊的时间点。使用AVPlayer
实例来播放一个asset。你可以使用AVQueuePlayer
对象来按序播放一系列的item(AVQueuePlayer是AVPlayer的一个子类)。
一个player给你提供了播放状态的信息,如果有需要,你可以让你的UI和player的状态相同步。通常情况下,你可以直接指出player的输出到一个特定的Core Animation的layer上(AVPlayerLayer
或者AVSynchronizedLayer
)对象。
多个player layer:你可以对一个AVPlayer实例创建很多的AVPlayerLayer对象,但是只有最近创建layer才可以在屏幕上展示在视频内容。
你不用给AVPlayer对象直接提供assets,尽管你最终想要播放的是asset。相反,你需要提供一个AVPlayerItem的实例。以个item用来管理其相关联的asset的presentation state。一个item包含一个AVPlayerItemTrack的实例,这个实例和asset中的track相对应。结构如下:
下面的图说明了你可以用不同的player同时播放一个指定的asset,但是每个player都可以用不同的方式进行渲染。例如,使用item track,你可以在播放期间让一个特定的track失效(比如,你可能不想播放一个音频部分)。
你可以使用一个已经存在的asset来初始化一个player,或者你可以用一个URL来初始化一个player,以便于你可以再一个特定的点来播放这个资源(AVPlayerItem
将会对这个资源的创建和配置这个asset)。和AVAsset
一样,仅仅初始化一个player item并不意味着它可以直接用来播放。你可以使用KVO来观察这个item的status
属性来决定播放的时机及播放的逻辑。
处理不同类型的Asset
你可以根据将要播放的不同的Asset类型来决定怎样配置asset。一般说来,有两种不同的类型:文件类型的assets,有几种可以选择,比如:本地文件,相机胶卷,或者媒体库;另外就是基于流的assets(HTTP直播流形式)。
基于文件的视频加载,为了播放基于文件的视频,有以下步骤:
- 创建一个
AVURLAsset
对象。 - 使用asset创建一个
AVPlayerItem
对象 - 将一个
AVPlayer
和这个item对象相关联 - 等待,一直到这个item的
status
属性指明可以播放了(利用KVO)
基于HTTP直播视频流来播放,利用该URL创建一个AVPlayerItem。(你不可以直接创建一个AVAsset
对象来代表HTTP Live Stream
的媒体)
1 | NSURL *url = [NSURL URLWithString:@"<#Live stream URL#>]; |
这个syncUI
的方法可以将button和player的状态相同步。
1 | - (void)syncUI { |