2016-12-02 126 views
0

我們正在研究將兩個m3u8合爲一體的服務器端解決方案。我們之前一直使用FFMPEG來連接兩個流並創建一個新流。這一切工作正常。contrib hls js跳過m3u8的一部分,如何防止這個

但是,由於性能問題,我們決定通過分析原始m3u8文件並將它們連成一體來重新設計實現。

這似乎工作正常,我們能夠分析原始文件並重建m3u8。在此之後,我們爲客戶提供'新'm3u8,一切都在播放。 我們對第二個m3u8文件進行同樣的處理,再次,一切正常,我們也能夠播放這個文件。

我們嘗試的下一件事是連接兩個文件成爲一個。這似乎工作得很好,我們把這些片段放在另一個片段上,然後將其提供給玩家。 在safari中,這個作品很有魅力,因爲我們不需要任何額外的插件/ javascript/etc。

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

我已經發現鉻一些調試信息,似乎緩存器所讀(因爲它是第二個文件播放,它重新從0開始) '00:00:57 466 \t debug \t跳過拼接幀生成:0us處的第一個新緩衝區在0us處的現有緩衝區處或之前開始。 00:00:57 605 \t info \t視頻編解碼器:avc1.42C00D' – bekks8

回答

0

當你縫合兩個或更多流在一起,你需要的,如果有變化,E,G,時間戳或曲目,將其與#EXT-X-DISCONTINUITY標籤分開。從規格:

的EXT-X-DISCONTINUITY標籤務必存在如果在 以下任一特性的變化:

o文件格式

O號,類型和標識符的跟蹤

Ø時間戳序列