请教一下 hls.js 播放自己拼接的 m3u8 的问题:两段 ts 本身的 start time 不一致导致无法播放

2021-11-06 18:55:41 +08:00
 phpfpm

业务场景是我们把直播流推到了 cdn ,最终直播结束之后会给我们一些 m3u8 文件作为回放。

正常情况下不断流的时候是一个我们直接截取一下 m3u8 对应的时长片段就好了。

偶尔出现需要拼接的时候,我就是简单的读取一下 m3u8 的相应分段然后接在一起。

但是现在遇到了用浏览器的 hls.js 播放的时候,发现拼接部分无法继续的情况,主要表现是:


# xxxxxx
http://site.example.com/section-a-20min.ts

# xxxxxx
        
http://site.example.com/section-b-01min.ts

这样两段就卡住了。

用 ffmpeg -i 看了一下两段 ts ,能看到 ts 本身记录了时长和 start:

$ ffmpeg4 -i section-a-20min.ts
...
Duration 00:00:00:60 Start 8000
...

$ ffmpeg4 -i section-b-1min.ts
...
Duration 00:00:00:60 Start 0
...

也就是说,hls.js 会根据 ts 文件本身的 start 字段去找下一段,当发现播放列表的下一段 ts 不是下一个 start 的时候就拒绝播放

想问下有啥好的解决方案吗?

我这边能想到的是用 ffmpeg 重新编码再切分,忽略 start 本身这个时间。

900 次点击
所在节点    问与答
1 条回复
phpfpm
2021-11-06 19:25:01 +08:00
自问自答:

对于 hls.js ,还有 m3u8 的标准

RTFM

在需要的地方加上#EXT-X-DISCONTINUITY 就好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/813526

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX