问题描述
可以参考这篇文章,博主遇到的问题跟他类似: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可以从头播放了,而且不影响切片,当切片完成时,自动转为点播模式!