iOS 基于AVPlayer封装的播放器,全屏切换,切换播放源
2018-01-20 14:03
1231 查看
效果图:
看了一些githup上star比较多的一些播放器,比如ZFPlayer,CLPlayer。关于全屏切换以及切换播放源的实现基本一样,但是在全屏切换ZFPlayer实现不是很好。
ZFPlayer关闭了当前控制器的旋转属性才可以旋转。代码片段:
如果shouldAutorotate返回为YES,全屏切换就会出问题。
CLPlayer的作者提供了一种思路,当页面可以进行旋转的时候,直接利用KVC设置旋转即可.
当页面不可以旋转的时候,可以旋转当前视图。
补充一点:当前页面旋转以及不可旋转有一个区别:旋转的方向是相反的,需要我们做个判断:
之前都是使用使用私有的API进行旋转,可以了解一下,尽管可以上架,当时有一定的风险:
因为私有API的风险,所以基本上在切换横屏的时候,当前播放器是加在keyWindow上的。
关于切换播放源,我们只需要移除当前playerItem的通知、观察者,重置播放器即可。
关于单击显示以及双击暂停播放,处理如下:
我们需要开启定时器显示以及隐藏控制层,但是当有手势或者触摸作用在播放器的时候,会和定时器冲突。我们需要的是在当前屏幕接收事件的时候定时器不起作用,所有需要在接收手势的地方做处理,5秒后用户没有操作恢复定时器,时间可以自己设定:
关于全屏处理屏幕亮度和音量还是借鉴上面两个播放器,代码几乎都一样,就不多说了。
还有一点:ZFPlayer,CLPlayer 并没有对slider做处理。我们经常会看到播放器,点击slider会快进到某个进度,或者slider会有一个平移手势,以此来快进快退。所以我也对slider做了处理。
关于播放器的释放,本来是打算移除通知,置空player全部放在dellloc中,结果发现返回的时候播放器会延迟销毁。所以就把销毁播放器放在当前页面即将消失的时候。
最后
注意点基本上已经介绍完了,因为不太喜欢delegate的冗余,所以代码中基本上都使用了block回调,本意是希望代码简洁一点,结果发现代码量依旧不少。
看了一些githup上star比较多的一些播放器,比如ZFPlayer,CLPlayer。关于全屏切换以及切换播放源的实现基本一样,但是在全屏切换ZFPlayer实现不是很好。
ZFPlayer关闭了当前控制器的旋转属性才可以旋转。代码片段:
CLPlayer的作者提供了一种思路,当页面可以进行旋转的时候,直接利用KVC设置旋转即可.
关于切换播放源,我们只需要移除当前playerItem的通知、观察者,重置播放器即可。
还有一点:ZFPlayer,CLPlayer 并没有对slider做处理。我们经常会看到播放器,点击slider会快进到某个进度,或者slider会有一个平移手势,以此来快进快退。所以我也对slider做了处理。
注意点基本上已经介绍完了,因为不太喜欢delegate的冗余,所以代码中基本上都使用了block回调,本意是希望代码简洁一点,结果发现代码量依旧不少。
相关文章推荐
- iOS在线音乐播放SZKAVPlayer(基于AVPlayer的封装)
- iOS-基于AVPlayer的视频播放器代码封装-0-需求分析与框架设计阶段
- iOS基于AVPlayer自定义播放器
- iOS开发 - 用AVPlayer封装一个播放器
- 源码推荐(0717):基于AVPlayer的封装,按钮切换
- android 横竖屏切换属性和播放视频全屏切换
- iOS记录App、封装播放器、核心动画、加载框架、分段器、多种控件等源码
- iOS sqlite 增删改查 简单封装(基于 FMDB)
- 论坛源码推荐(11.3):基于 AFNetworking封装的iOS网络库,NSLog的替代选择
- iOS语音播放之切换听筒和扬声器的方法解决方案
- iOS 使用AudioRecorder录音后在使用AVPlayer播放不了声音的问题
- iOS AVPlayer切换播放源实现连续播放和全屏切换的方法
- iOS AvPlayer AvAudioPlayer音频的后台播放问题
- iOS AVPlayer后台播放的实现
- html5移动端点击不会全屏播放的播放器
- 基于Android5.1系统的WebView实现在线登录及全屏播放
- 一个简单的基于 DirectShow 的播放器 1(封装类)
- vue 组件的封装之基于axios的ajax请求
- 实现iOS全局禁止横屏,但kxmovie全屏横屏播放视频
- ios开发-AVPlayer 音乐播放自定义经典例题