HLS直播变点播,未按顺序从头播放问题(vidoe.js/videojs-contrib-hls.js)。

2023-09-05 15:39:43 浏览数 (1)

问题描述

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

0 人点赞