contrib hls js 跳过 m3u8 的部分,如何防止这种情况

contrib hls js skips parts of the m3u8, howto prevent this

我们正在研究将两个 m3u8 整合为一个服务器端解决方案。我们之前一直使用 FFMPEG 来连接两个流并创建一个新流。这一切都很好。

但是,由于性能问题,我们决定通过分析原始 m3u8 文件并将它们合并为一个文件来重新设计实现。

这似乎工作正常,我们能够分析原始文件并重建 m3u8。在此之后,我们将 'new' m3u8 提供给客户端,一切都会播放。 我们对第二个 m3u8 文件执行相同的过程,同样,一切正常,我们也能够播放该文件。

接下来我们尝试将两个文件合并为一个文件。这似乎工作得很好,我们将片段一个接一个地放在一起,然后将其提供给玩家。 在 Safari 中,这就像一个魅力,因为我们不需要任何额外的 plugins/javascript/etc.

Chrome,使用 video.js 和 video-contrib-hls,开始播放流并且似乎工作正常。但是,它基本上只是跳过连接流(哪个是第二个)。您可以看到电影的 运行 时间变短了,片段被播放器忽略了。

有没有解决这个问题的?

下面是示例部分或我们的串联 m3u8(我已经更改了 url)。

#EXTM3U
#EXT-X-VERSION:5
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:20
#EXT-X-PROGRAM-DATE-TIME:2016-12-01T18:16:11.743000+00:00
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=123&v=123&r=g",IV=0x00000000000000000000000000000000
#EXTINF:4.0960,
http://subdomain1.someurl.com/slices/648/456/123/G00000000.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=123&v=123&r=g",IV=0x0000000000000000000000000000000B
#EXTINF:4.0960,
http://subdomain1.someurl.com/slices/648/456/123/G0000000B.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=123&v=123&r=g",IV=0x0000000000000000000000000000000C
#EXTINF:4.0960,
http://subdomain1.someurl.com/slices/648/456/123/G0000000C.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=123&v=123&r=g",IV=0x0000000000000000000000000000000D
#EXTINF:4.0960,
http://subdomain1.someurl.com/slices/648/456/123/G0000000D.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=123&v=123&r=g",IV=0x0000000000000000000000000000000E
#EXTINF:4.0960,
http://subdomain1.someurl.com/slices/648/456/123/G0000000E.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=123&v=123&r=g",IV=0x0000000000000000000000000000000F
#EXTINF:4.0960,
http://subdomain1.someurl.com/slices/648/456/123/G0000000F.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=123&v=123&r=g",IV=0x00000000000000000000000000000010
#EXTINF:2.64830,
http://subdomain1.someurl.com/slices/648/456/123/G00000010.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=789&v=789&r=d",IV=0x00000000000000000000000000000000
#EXTINF:4.0960,
https://subdomain2.someurl.com/slices/4da/456/789/D00000000.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=789&v=789&r=d",IV=0x00000000000000000000000000000001
#EXTINF:4.0960,
https://subdomain2.someurl.com/slices/4da/456/789/D00000001.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=789&v=789&r=d",IV=0x00000000000000000000000000000002
#EXTINF:4.0960,
https://subdomain2.someurl.com/slices/4da/456/789/D00000002.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=789&v=789&r=d",IV=0x00000000000000000000000000000003
#EXTINF:4.0960,
https://subdomain2.someurl.com/slices/4da/456/789/D00000003.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=789&v=789&r=d",IV=0x00000000000000000000000000000004
#EXTINF:4.0960,
https://subdomain2.someurl.com/slices/4da/456/789/D00000004.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=789&v=789&r=d",IV=0x00000000000000000000000000000005
#EXTINF:4.0960,
https://subdomain2.someurl.com/slices/4da/456/789/D00000005.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=789&v=789&r=d",IV=0x00000000000000000000000000000006
#EXTINF:4.0960,
https://subdomain2.someurl.com/slices/4da/456/789/D00000006.ts?x=0&si=0
#EXT-X-KEY:METHOD=AES-128,URI="https://localhost/check2?b=789&v=789&r=d",IV=0x00000000000000000000000000000007
#EXTINF:3.09250,
https://subdomain2.someurl.com/slices/4da/456/789/D00000007.ts?x=0&si=0
#EXT-X-ENDLIST

当您将两个或多个流拼接在一起时,如果时间戳或轨道等内容发生变化,您需要使用 #EXT-X-DISCONTINUITY 标记将它们分开。来自规范:

The EXT-X-DISCONTINUITY tag MUST be present if there is a change in any of the following characteristics:

o file format

o number, type and identifiers of tracks

o timestamp sequence