1

我可以使用播放列表 master.m3u8、video.m3u8 和 metadata.m3u8 使用 hls.js 播放器播放实时流。该视频是使用 ffmpeg hls 命令创建的,并使用带有 args 的滚动实时窗口:

-hls_list_size 20 -hls_time 2 -hls_flags delete_segments

这会创建从 video0.ts 到 video19.ts 的视频片段,然后在添加新片段时开始删除第一个片段。video.m3u8 最终看起来像......

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:25
#EXTINF:2.002133,
video25.ts
#EXTINF:2.002133,
video26.ts
...

我的 metadata.m3u8 播放列表看起来很相似,尽管我是从单独的来源创建的。视频和元数据播放列表保持同步,从我的直播开始就可以正常播放。

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:25
#EXTINF:2.000
sub_25.vtt
#EXTINF:2.000
sub_26.vtt
...

当我重新加载播放器页面时,问题就开始了。重新加载时,播放器加载播放列表并将在当前直播点正确播放。

我看到它在 video45.ts 和 sub_45.vtt 周围加载片段。这似乎是正确的,因为 video.m3u8 中的媒体序列为 25。添加 20 个片段的播放列表大小,实时位置约为第 45 个片段。这是大约 90 秒进入现场。

但是,播放器中的媒体时间显示为 40 秒。似乎用播放列表中的片段数只能得出 40 秒,尽管真正的直播时间是 90 秒。

最后产生的问题是 40 秒的媒体时间被用于引用文本轨道提示并显示 40 秒的字幕......而不是 90 秒标记视频实际来自哪里。

有没有办法让播放器正确反映“实时”时间,尽管实时滚动窗口,所以字幕(正确加载)在正确的时间显示?

还是滚动窗口实时播放不适用于 vtt 中的字幕?

如果我禁用滚动窗口支持,我可以多次重新加载直播,并且“完整”直播时间加载并且字幕排好。

4

0 回答 0