iOS通过AVPlayer打造视频
摘 要:AVPlayer是用于管理媒體资产的播放和定时控制。它提供了控制播放器的方法,如它可以在媒体的时限内播放,暂停,和改变播放的速度,可以使用AVPlayer来播放本地和远程的视频媒体文件,如QuickTime影片和MP3音频文件,以及视听媒体使用HTTP流媒体直播服务。获取源代码,请访问我的GitHub。
关键词:m3u8流媒体;AVPlayer;iOS视频播放器;自定义播放
1 AVPlayer播放的两个层
1.1 一个普通播放器的组成
1.2 创建播放层视图类
(1)使用AVPlayer需导入AVFoundation框架
(2)创建类VideoPlayerView。
(3)播放器的初始化,在VedioPlayerView里创建AVPLayerLayer并把AVPlayer加入
(4)接着设置下播放窗口大小为试图大小并加到视图的层上。注意这里也可以先加AVURLAsset,本例未使用这个方式,self.asset可以记录缓存大小,而使用AVURLAsset初始化URL代码太复杂。
(5)播放层视图类里的属性。
(6)视频播放需大量使用KVO和NSNotificationCenter。
1.3 创建控制层视图类
(1)控制层在视频视图层的上面一层,用来控制视频的播放,如图
(2)创建类ControlView。控制层在视频视图的上面一层,用来控制视频的播放。
(3)拖拽按钮到控制层视图类里,并添加属性。
2 AVPlayer的功能和组成
基于AVPlayer封装的轻量级播放器,可以播放本地网络视频,易于定制,适合初学者学习打造属于自己的视频播放器。
2.1 初始化播放器和配置
2.1.1 播放器的初始化
初始化
2.1.2 播放窗口放置方式videoGravity
放置方式有以下三种:
(1)AVLayerVideoGravityResizeAspect 按比例填充
(2)AVLayerVideoGravityResizeAspectFill 按比例最大化填充
(3)AVLayerVideoGravityResize 拉伸填充
这里使用按比例最大化填充
2.1.3 如果播放时需要显示视频里附带的字母可以设置显示字幕
字幕选择
2.2 横屏全屏以及旋转
(1)点击全屏按钮或者旋转手机的时候,判断旋转方向并全屏播放。
(2)收到系统屏幕旋转的通知调用deviceDidRotate方法。
(3)当横屏时播放窗口放置在APP最上层,竖屏时销毁。横屏时调用的方法主要完成,1在父窗口移除播放器,2横屏全屏尺寸,3把播放器加在视图最上层。
(4)竖屏时调用的方法主要完成,1在父窗口移除播放器,2竖屏窗口尺寸,3把播放器加回到原先fatherView竖屏窗口。
2.3 进度条
刷新进度条包括,1当前时间显示、2进度百分比。在播放器里添加一个观察者每一秒钟监听一次并刷新进度。
2.4 前后台切换播放
收到系统播放退到后台的通知调用appWillResignActive方法。
收到系统播放进入前台的通知调用appDidBecomeActive方法。
2.5 播放的销毁
当播放器被父视图移除时候(removefromSuperView())会调用播放视图的deinit()方法。需要同时销毁观察者和纪录退出时的播放时间。
3 使用封装好的AVPlayer
3.1 播放的加载
在视图控制器ViewController加入PlayURL方法。
3.2 播放\暂停
在视图控制器ViewController加入播放、暂停按钮的点击事件。
3.3 手势的调用
(1)在手势添加在播放视图上。方法和属性添加到控制器中。
(2)在视图控制器ViewController加入单击播放窗口出现控制视图,再次点击控制视图消失。
3.4 分享等自定义其他功能
在视图控制器ViewController拖入分享图标的方法,让ShareView弹出到控制器的view视图的最上层。加入其他功能方法以此类推。
4 结语
表述能力有限,如果大家喜欢的话,希望进入github网址star一下。
我的GitHub:https://github.com/zhangpengfic/ZPlayer。