详解iOS视频播放方式

2020-01-21 03:12:52于海丽

1、AVPlayerItem

在我们使用AVPlayer播放视频的时候,提供视频信息的就是AVPlayerItem,一个AVPlayerItem对应着你提供的一个视频Url资源,这个理解它的时候可以把它比作一个Model, 你初始化了AVPlayerItem之后,并不是马上就可以使用它了,因为凡是和Url网络扯上关系的,都需要时间,等AVPlayerItem加载好之后就可以使用它了,那这一步我们怎么处理呢?

1> : 答案是利用KVO观察statues属性为 AVPlayerStatusReadyToPlay,看看这个属性的定义:

 @property (nonatomic, readonly) AVPlayerStatus status  它是一个只读属性,这点也需要注意,其实也就理解利用KVO的原因。

2>: 顺便总结要是你要显示当前视屏的缓存进度,你需要监测它的loadedTimeRanges属性。

2、AVPlayerLayer

它主要负责的就是视频的显示,继承自CALayer,其实你可以把它理解成我们的View。我们自定义的那些播放时候的控件就是添加在它上面的,比如我们能看到的播放按钮,停止按钮,或者播放进度条等等。

3、 AVPlayer  

它主要负责的是管理视频播放,暂停等等,相当于一个视频管理器,要是类比的话他就是一个ViewController(当然不是真正的ViewController),这三者就基本含括了一个基本的视频播,基于着三者我们总结一下播放一个视频的基本的过程:

首先,得到视频的URL 根据URL创建AVPlayerItem 把AVPlayerItem 提供给 AVPlayer AVPlayerLayer 显示视频。 AVPlayer 控制视频, 播放, 暂停, 跳转 等等。播放过程中获取缓冲进度,获取播放进度。视频播放完成后做些什么,是暂停还是循环播放,还是获取最后一帧图像。

4、AVPlayerViewController

它是Apple 帮我们封装好的可以一个视频播放控制器,它就有一个  @property (nonatomic, strong, nullable) AVPlayer *player 的属性,前面的AVPlayer也就像相应的需要赋值给它,它里面还有一些我们需要理解一下的属性,我们也把它写出来,具体代码我们下面再看:

player:                                    设置播放器 showsPlaybackControls:           设置是否显示媒体播放组件,默认YES videoGravity:                           设置视频拉伸模式 allowsPictureInPicturePlayback: 设置是否允许画中画回放,默认YES delegate:                                设置代理

5、AVPlayerViewControllerDelegate

这个代理就是前面说的AVPlayerViewController的协议,它主要的是为画中画的设置的代理,前面介绍 AVPlayerViewController 的时候有看到过一个是否允许画中画的属性,具体什么是画中画相信大家都了解,看过直接的朋友应该都看到了这个技术点的具体应用。我们看看它里面的饭法规主要都干了些什么?