我们正在研究服务器端解决方案,将两个m3u8合二为一。我们之前使用FFMPEG来连接两个流并创建一个新流。一切正常。
但是,由于性能问题,我们决定通过分析原始m3u8文件并将它们连接在一起来重新设计实现。
这似乎工作正常,我们能够分析原始文件并重建m3u8。在此之后,我们为新的'提供服务。 m3u8到客户端,一切都在播放。 我们对第二个m3u8文件进行了相同的处理,同样,一切正常,我们也能够播放这个文件。
接下来我们尝试将两个文件连接成一个。这似乎工作得很好,我们把片段放在另一个上,然后将它提供给播放器。 在safari中,这就像一个魅力,因为我们不需要任何额外的插件/ javascript /等。
Chrome,使用video.js和video-contrib-hls,开始播放该流并且似乎有效。但是,它基本上只是跳过连接流(其中一个是第二个)。您可以看到电影的运行时间变短,播放器会忽略片段。
这个问题还有吗?
下面是一个示例部分或我们连接的m3u8(我已经更改了网址)。
#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
答案 0 :(得分:1)
当您将两个或更多个流拼接在一起时,如果e,g,时间戳或轨道发生变化,则需要使用#EXT-X-DISCONTINUITY标记将它们分开。来自规范:
如果有变化,必须出现EXT-X-DISCONTINUITY标签 具有以下任何特征:
o文件格式
o曲目的编号,类型和标识符
o时间戳序列