问题描述
可以参考这篇文章,博主遇到的问题跟他类似:HLS实现点播和直播时,M3U8文件的不同;
主要问题就是当m3u8文件没有切片结束时(也就是最后没有#EXT-X-ENDLIST这行代码),直播内容为倒数第三个开始,而不是从头。
技术背景
考虑到H5标签对m3u8的兼容性,于是用了video.js 和 videojs-contrib-hls,具体使用可以在我贴出的github连接上找到。
资料查找
翻箱倒柜,终于在谷歌找到了如下描述:gst-plugins-bad: hls: Exclusion of last three fragment in case of live playback;有一段话是这样讲的:
HLS spec 6.3.3 is saying that
"the client SHOULD NOT choose a segment which starts less than
three target durations from the end of the Playlist file."
原来 HLS spec 6.3.3就是这么实现的,于是继续查找,发现新大陆,貌似有个参数#EXT-X-START可以控制,于是在m3u8文件头加上这行,无奈不起作用;
继续翻箱倒柜,我看到了问题原因:HTTP Live Streaming draft-pantos-http-live-streaming-12;MD原来hls协议已经支持,但是我用的videojs-contrib-hls.js插件貌似不支持!
解决办法
最后放弃寻找插件,自己动手丰衣足食,通过在浏览器断点测试的帮助下,在videojs-contrib-hls.js中将 this.tech_.setCurrentTime(seekable.end(0));改为this.tech_.setCurrentTime(seekable.start(0));
成功解决此问题,当我的广告文件播放结束后,m3u8可以从头播放了,而且不影响切片,当切片完成时,自动转为点播模式!
感想
有时候连我们自己都不知道为什么要这么做,但是做完之后他就是成功了,我也很无奈啊!
等一等,我明明是做后端开发的啊?
本文由 litblc 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Oct 12, 2017 at 05:03 pm

