1、前言
iOS 开发过程中常见的视频播放器主要有AVPlayer播放器和ijkPlayer播放器。AVPlayer是由苹果内部提供的一套关于点播的播放器,ijkPLayer是Bilibili基于ffmpeg开发并开源的轻量级视频播放器,支持播放本地网络视频,也支持流媒体播放。
2、AVPlayer的介绍
Apple为开发者提供两种视频播放方式,一种是使用MPMoviePlayerController,还有一种是使用AVPlayer.关于这两个视频的区别简而言之就是MPMoviePlayerController使用更简单,功能不如AVPlayer强大,而AVPlayer使用稍微麻烦点,不过功能更加强大.
3、AVPlayer特点
AVPlayer存在于AVFoundation中,它更加接近于底层,所以灵活性也更强,AVPlayer本身并不能显示视频,而且它也不像MPMoviePlayerController有一个view属性.如果AVPlayer要显示必须创建一个播放器层AVPlayerLayer用于展示,播放器层继承于CALayer,只要把AVPlayerLayer添加到控制器视图的layer中即可.
4、AVPlayer解码方式
AVPlayer+httpserver+HLS的组合方案的硬件解码方式
CPU消耗极低,解码效率极高、但视频有延迟,不适合做视频通讯
5、AVPlayer三要素
AVPlayerItem(提供数据,设置数据源)
AVPlayer(负责控制播放,暂停、播放、指定时间播放等)
AVPlayerLayer(负责显示如果缺少就只有声音没有视频)
6、AVPlayer使用步奏
1、获取数据源url
2、根据URL创建AVPlayerItem
3、把AVPlayerItem提供给AVPlayer
4、AVPlayerLayer显示视频
5、AVPlayer控制视频播放、暂停、跳转等
6、添加播放过程中的各种监听等
7、AVPlayer常见的通知
[_playerItemaddObserver:selfforKeyPath:@"status"options:NSKeyValueObservingOptionNewcontext:nil];//加载状态改变通知
[_playerItemaddObserver:selfforKeyPath:@"loadedTimeRanges"options:NSKeyValueObservingOptionNewcontext:nil];//缓冲进度,可有可无,可以增加用户体验
[_playerItemaddObserver:selfforKeyPath:@"playbackBufferEmpty"options:NSKeyValueObservingOptionNewcontext:nil];//缓冲为空
[_playerItemaddObserver:selfforKeyPath:@"playbackLikelyToKeepUp"options:NSKeyValueObservingOptionNewcontext:nil];//缓冲可以播放的时候调用
[_playerItemaddObserver:selfforKeyPath:@"playbackBufferFull"options:NSKeyValueObservingOptionNewcontext:nil];//缓冲完成
[self.playeraddObserver:selfforKeyPath:@"currentItem"options:NSKeyValueObservingOptionNewcontext:nil];/*监听AVPlayer "currentItem"属性*/
[self.playeraddObserver:selfforKeyPath:@"rate"options:NSKeyValueObservingOptionNewcontext:nil];/*监听AVPlayer "rate"属性以便我们去更新播放进度控件. rate = 0暂停rate = 1播放*/
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(playbackFinished:)name:AVPlayerItemDidPlayToEndTimeNotificationobject:nil];//播放结束通知