业务场景是我们把直播流推到了 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 本身这个时间。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.