前言
demo地址在最下面。请各位爷慢慢看。感觉满意了记得点个赞。
先来张图活跃一下气氛:
之前遇到过的问题
先说一下我之前遇到过的关于视频播放器的问题都有哪些:
(1):只有声音,没有界面,完全黑屏的那种。
(2):点击几个视频之后内存飙升,严重点的直接崩溃掉。
(3):切换到后台或者上划出现控制界面下划出现通知界面回来之后播放器异常(也可能界面不动了,也可能是时间不走了或者等等其他问题)。
(4):进度条不灵敏,点击或者拖动进度条出现进度跳动现象(就是最终的进度不是你想要的结果,一般都是向前拖动结果回避你想要的结果靠后,向后拖动结果会比你想要的结果靠前)。
(5):等等等等。。。。。。
当然这些知识目前我遇到过的很基本的问题,后面如果有机会继续深入的话我会继续把我的研究成果分享给大家。
#框架介绍
用一张图介绍一下我做的视频播放器的层次结构:
如上图,视频播放器分成两大部分,一部分是视频播放器的属性信息部分,另外一部分是UI部分。下面是对于各个部分的介绍:
ZFTPlayerOption:
存放视频播放器的属性信息,主要包括:屏幕方向、是否是正在播放状态、当前的播放进度、当前的播放时间、视频的总时长、当前视频是否处于可见位置、当前视频所在界面是否处于活跃状态
其中屏幕的方向主要包括五种情况:home键在下面、home键在左边。Home键在右边、home在上面、未知状态。(目前对于home键在上面和未知状态的方向有特别处理,这个后面再屏幕旋转的时候有说明)。
playerBaseView
负责视频播放器以及相关UI控件的展示功能。其中主要包括四部分UI控件:视频播放器以及附着在其上面的展位图片的PlayerView、播放暂停按钮还有时间显示等一系列说明视频播放器状态的CoverView、显示加载视图的LoadingView、网络异常时候显示的网络提醒界面:netShowView。示意图如下:
这四个控件之间的层级关系从下往上依次是(左边的是处于下面的,右边的是处于上面的):
netShowView(显示网络提醒界面)
LoadingView(加载视图)
coverView(播放暂停按钮、全屏按钮、返回按钮等控件)
playerView(视频播放界面、视频占位图片)
这样可以保证在具体使用过程中这四个UI控件不会出现层级混乱的现象。
一:配置依赖环境
1.1:ijkplayer需要的系统系统依赖库如下:
1.2:IJKMediaFramework.framework传到百度网盘了,具体的下载地址是:链接: https://pan.baidu.com/s/1o8wPRzO 密码: pdwm 下载完成之后解压放在项目中就可以了。
1.3:把AFNetworking,Masonry(SDWebimage)集成到项目中。
二:AppleDelegate相关设置
2.1:设置两个全局变量,以便于后面整个项目使用,第一个是:决定是不是允许支持屏幕旋转的参数,第二个是表示当前网络状态的参数。
2.2:iPhone手机端好像不支持home键在上面的方向吧,所以需要针对hom