2016-12-02 2 views
0

Wir arbeiten an einer serverseitigen Lösung, um zwei m3u8 zu einem zusammenzusetzen. Wir haben zuvor FFMPEG verwendet, um die beiden Streams einfach zu verketten und eine neue zu erstellen. Das alles funktioniert gut.contrib hls js überspringt teile des m3u8, wie kann man das verhindern

Aufgrund von Leistungsproblemen haben wir uns jedoch dazu entschlossen, die Implementierung neu zu gestalten, indem wir die ursprünglichen m3u8-Dateien analysieren und diese zu einem Ganzen zusammenfügen.

Das scheint gut zu funktionieren, wir können die Originaldateien analysieren und den m3u8 neu erstellen. Danach servieren wir dem Kunden den 'neuen' m3u8 und alles spielt. Wir gehen den gleichen Prozess für die zweite m3u8 Datei durch, wieder funktioniert alles, und wir können diese Datei auch spielen.

Das nächste, was wir versuchen, ist die Verkettung der beiden Dateien, um eins zu werden. Das scheint gut zu funktionieren, wir setzen die Segmente danach auf einen anderen und servieren es dann dem Spieler. In Safari funktioniert das wie ein Zauber, da wir keine zusätzlichen Plugins/Javascript/etc.

Chrome, mit video.js und video-contrib-hls, beginnen, den Stream zu spielen und scheint zu arbeiten. Es überspringt jedoch im Grunde nur den verketteten Stream (welcher auch immer der zweite ist). Sie können sehen, dass die Laufzeit des Films kürzer wird und die Segmente vom Player ignoriert werden.

Gibt es trotzdem dieses Problem?

Unten ist ein Beispielteil oder unser verkettetes m3u8 (ich habe die URL geändert).

#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

i einige Debug-Informationen in Chrom gefunden haben, scheint, dass die Puffer gelesen sind unkorrekt (da es eine zweite Datei ist, startet es bei 0 neu) '00:00:57 466 \t debug \t Überspring Spleißrahmengenerierung: der erste neue Puffer bei 0us beginnt bei oder vor dem Puffer bei 0us. 00:00:57 605 \t info \t Videocodec: avc1.42C00D' – bekks8

Antwort

0

Wenn Sie zusammen zwei oder mehr Ströme Stich müssen Sie sie mit dem #EXT-X-DISCONTINUITY Tag trennen, wenn es Änderungen in e, g, der Zeitstempel oder Spuren. Von der Spezifikation:

Der EXT-X-DISKONTINUITäT Tag vorhanden sein muss, wenn es zu einer Änderung jeder der folgenden Merkmale in ist:

o Dateiformat

o Anzahl, Art und Kennungen von Spuren

o Zeitstempel-Sequenz

Verwandte Themen