2016-04-19 9 views
2

Ich verwende HTML5 Media source extensions (MSE), um ein Video mit DASH zu streamen. Ich habe meine Mediensegmente mit MP4Box aus einer MP4-Datei mit zwei Videospuren erstellt. Was ich habe, ist ein einzelnes Initialisierungssegment mit moov->sidx Boxen und mehreren Mediensegmenten moof->mdat, die beide Videospuren enthalten. Wenn ich sie an die sourceBuffer mit appendBuffer Funktion, MSE decodiert und zeigt nur die erste Videospur (ich nehme an, dass die Daten von der zweiten Videospur einfach verworfen wird).Ist es möglich, zwischen Videospuren in HTML5 MSE zu wechseln?

Hier sind die relevanten Teile von meinem Code:

sourceBuffer = mediaSource.addSourceBuffer(stats.mimeType); // mime type: video/mp4 
... 
// after downloading mediasegment append its contents 'data' to sourceBuffer 
sourceBuffer.appendBuffer(new Uint8Array(data)); 

Also meine Frage ist, ist es möglich, die sourceBuffer so zu steuern, dass der Client die Spur zu dekodieren wählen können? Ich nehme an, dass das Aufteilen der Videospuren auf verschiedene Adaptionssätze (Erstellen separater mp4-Dateien mit jeweils einer einzelnen Videospur) eine Lösung sein könnte, aber ich bin nicht an diesem Ansatz interessiert.

Danke Jungs.

Antwort

3

Okay, ich habe einen Weg gefunden, wie man das macht. Mit dem Attribut videoTracks können wir auf die Videospuren zugreifen und das Attribut selected ändern. Es war also ziemlich einfach zu machen. Hier

ist ein Beispiel, wie die Spuren zu wechseln, nachdem die dritte Segment heruntergeladen wurde:

if(segmentCnt==3 && sourceBuffer.videoTracks.length == 2) 
{ 
    console.log('tracks cnt: ' + sourceBuffer.videoTracks.length); 
    for(var i=0; i<sourceBuffer.videoTracks.length; i=i+1) { 
     var trackID = sourceBuffer.videoTracks[i].id; 
     var trackSelected = sourceBuffer.videoTracks[i].selected; 
     console.log('trackID: ' + trackID + ' selected: ' + trackSelected); 
     sourceBuffer.videoTracks[i].selected = !trackSelected; 
    } 
}