使用HLS模拟直播

时间:2019-04-26 19:27:04

标签: javascript hls

我有2个.m3u8文件用于VOD流传输(来自外部链接的.ts),我想将两者合并但要模拟实时流传输。

这些是我的服务器在两个不同的调用(两个不同的时间)中生成的2个.m3u8文件。我的问题是第二个#EXT-X-MEDIA-SEQUENCE:5应该是4。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:7
#EXTINF:6,
https://.../5ZzHEGriq_medium_00001.ts
#EXTINF:6,
https://.../5ZzHEGriq_medium_00002.ts
#EXTINF:6,
https://.../5ZzHEGriq_medium_00003.ts

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:5
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:7
#EXTINF:6,
https://.../5ZzHEGriq_medium_00002.ts
#EXTINF:6,
https://.../5ZzHEGriq_medium_00003.ts
#EXTINF:6,
https://.../5ZzHEGriq_medium_00004.ts

我在服务器端使用计时器来确定应该返回的最后一个片段是什么。问题是,客户有时会提早执行请求(在这种情况下,先将先知1-2-3更改为2-3-4或3-4-5),然后又是其他时间(1-2-3至5-6-7)例如)。

我认为更好的选择是跟踪当前序列为1-2-3,并在下一次更改3-4-5时返回,但是如何在没有客户端信息的情况下进行操作。

我正在使用此功能来检查当前的.ts

f(elapsedTime) {
    return fragments.findIndex(fragment => (fragment.offset + fragment.duration >= elapsedTime));
}

其中elapsedTime来自全局计时器,fragments是具有.ts文件信息的对象。

我怎么说,问题是浏览器提早或晚执行请求时。我只设置了EXT-X-MEDIA-SEQUENCE = EXT-X-MEDIA-SEQUENCE + 2(因为我总是返回3个.ts文件列表)。

0 个答案:

没有答案