Streamen von mehrspurigem Audio mit DASH

9

Wir erstellen einen webbrowserbasierten Musikstreamingdienst, der Dateien mit separaten, synchronisierten Audiotracks streamt. Die Dateien sind grundsätzlich mp4s, aber mit einigen zusätzlichen Boxen.

Das Streaming erfolgt nach dem MPEG-DASH-Standard und hoffentlich ohne das Rad neu zu erfinden (zum Beispiel gibt es den Bindestrich .js ).

Update 160525 - Fügt weitere Hintergrundinformationen hinzu:

MPEG-DASH ist eine Voraussetzung für das Projekt, sowohl für seine Funktionen (Anpassungsfähigkeit, einfache Servereinstellungen usw.) als auch dafür, dass das Projekt, an dem ich arbeite, nur MPEG-Standards verwendet.

Das Streaming selbst ist eine On-Demand-Wiedergabe von statischen Dateien, d. h. kein Live-Streaming. Die Wiedergabe wird zwei Modi haben; ein statischer Modus, der nur die Tracks spielt, und ein interaktiver Modus, in dem der Benutzer die Lautstärke, das Panorama usw. ändern kann. Zur Zeit ist die statische Wiedergabe in Ordnung.

Nun scheint das Streaming synchronisierter Mehrspur-Audio nicht das üblichste Ding da draußen zu sein, und ich bin auf ein paar Probleme gestoßen:

1. Nach dem MPEG-DASH-Standard

MPEG-DASH scheint sich stark auf das Video-Streaming zu konzentrieren.

Gibt es Dokumente oder Richtlinien zum reinen Audio-Streaming, die ich nicht finden kann?

2. HTML5 Elemente vs Web Audio API

AFAIK, die Elemente <video> und <audio> unterstützen jeweils nur eine Audiospur. Sie bieten eine Menge Magie über MediaSource.addSourceBuffer() , wobei auf die direkte Dekodierung eingehender Puffer geachtet wird.

Zwei mögliche Wege, dies zu umgehen, sind:

  1. Verwenden Sie mehrere <audio> -Elemente und synchronisieren Sie sie manuell
  2. Verwenden Sie die Web Audio API, um (a) die Puffer zu einem einzigen Signal zu kombinieren, das an das Ziel des Audiokontexts gesendet wird, oder (b) AudioNode s für jede Spur zu erstellen und sie manuell zu synchronisieren. Das bedeutet, dass wir uns um die Dekodierung kümmern müssen

Gibt es andere oder bessere Möglichkeiten, mehrere synchronisierte Audiotracks zu streamen?

3. Verwenden vorhandener Bibliotheken

Der dash.js-Referenzplayer folgt den DASH-AVC / 264-Richtlinien, die meines Wissens Video-Streams adressieren und die Anzahl der gleichzeitig wiedergegebenen Audiotracks auf eins beschränken.

Es benutzt auch das HTML5 <video> Element, was zu den Problemen in 2. oben führt.

Es enthält jedoch große Mengen an DASH-bezogenen Funktionen, wie adaptives Streaming, MPD-Manifest-Parsing usw. etc.

Ist dash.js eine gute Lösung für Multi-Track-Musik-Streaming, oder wird es ein Hack sein?

Ich bin mehr als glücklich, Fragen zu beantworten oder korrigiert zu werden, wenn ich etwas falsch verstanden habe!

    
Alexander Wallin 24.05.2016, 10:49
quelle

1 Antwort

1

Einige Antworten, die ich kenne:

  1. Sie haben recht, dass die DASH-Diskussion hauptsächlich auf Video fokussiert ist, aber nur DASH-Audio ist immer noch sehr machbar.
  2. a) Die Media Source Extensions API (MediaSource.addSourceBuffer ()) ist absolut der richtige Weg, um die DASH-Wiedergabe einer einzelnen Quelle in JavaScript zu implementieren. DASH & amp; MSE wurde gleichzeitig mit der Absicht der Zusammenarbeit entwickelt. Suchen Sie nach mehr Referenzen um MSE und DASH.
  3. b) Sobald Sie einen einzigen DASH-Quellstrom über MSE abspielen, müssen Sie die beiden Quellen zu einer einzigen Ausgabe zusammenmischen, und das wird wahrscheinlich die Web Audio API verwenden, obwohl ich nicht so bin vertraut mit den Details dieser API.

Ich werde einen Kommentar hinzufügen, dass die Kombination von zwei Tracks auf der Client-Seite keine gute Idee zu sein scheint, es sei denn, es gibt Anforderungen, die Sie nicht erwähnt haben. Es macht mehr Sinn, den Mix auf der Serverseite mit ffmpeg oder ähnlichen Media Server Tools zu machen, dann müsste sich der Client nur um einen einzelnen Stream kümmern. Wenn die verschiedenen Quellenströme synchronisiert werden müssen, ist das wahrscheinlich nicht realistisch, um in JavaScript im Browser abzuziehen.

    
Colin Andrews 05.07.2016 20:33
quelle