iOS m3u8详情页预加载逻辑

详情页m3u8预加载需求:
加载完当前模板所有ts后,加载后续2个模板的2个ts文件

初步规划:

(1)当前加载时传入两个reload url,当前完成时将这两个url传入preloadManager进行预加载
(2)返回时取消当前预加载,在列表展示前完成取消,因为列表展示会触发列表预加载。
(3)滑到下一页时停止当前预加载,然后重复执行步骤1
(4)点击使用模板时停止当前预加载,返回模板页后暂停执行,恢复播放后继续步骤1
(5)看一下拉取更多模板是在什么时机,会不会存在正常下方有2个模板但拉取不到2个模板的情况。
(6)测试后台返回前台预加载是否正常。

汇总规划:

(1)播放前停止预加载,传入两个reloadUrl,当前m3u8结束后将这两个url传入preloadManager进行预加载 OK
(2)返回时删除两个reloadUrl,并取消预加载,在列表展示前完成取消 OK
(3)看一下拉取更多模板时机问题,有无影响模板预加载url的获取。 OK
新增一个uploadPreloadURL的方法,如果调用m3u8loader的cancelAll时url不为两个,则在拉取更多后调此方法。
方法中判断如果当前m3u8已经加载完了则直接preload开始,否则设置preloadURL属性,等加载完的回调里preload开始。
(4)进入后台时取消预加载,返回前台重新预加载。 OK
(5)进入相册如果当前已经播放完了,会有两个预加载正在进行,此时取消并记录状态,返回时继续预加载。OK
暂时不取消了,防止逻辑过多出现bug。

网络差时,详情页预览图播放,开发记录:
1,竖向列表进来、横向列表进来、下滑先看看MP4是否已经下载到本地,已经下载了则进行下一步 OK
2,HLS添加获取m3u8和ts是否已经下载的方法。 OK
3,判断是否ts加载完成,没有的话创建MP4Player。 OK
4, mp4Player创建一个父类,父类大小设置跟imageView占位图大小一致, OK
5,在cell显示时播放mp4,移出屏幕后停止mp4. OK
6,在m3u8播放器开始播放的回调中移除MP4Player OK
7,模拟慢网的情况,在慢网下看看是不是ts加载完开始播放了才移除的MP4Player OK
8,如果滑动到下一个则播放下一个mp4视频。 OK
9,看一下是否正常走了PreviewCell的deinit OK
10,外面m3u8下载失败在里边会重新开始下载。OK

你可能感兴趣的:(iOS m3u8详情页预加载逻辑)