Video mit mehreren Audiospuren

Binaural Audio
Umfrage
Upload:
November 17, 2022
aktualisiert am

Seit der letzten Recherche war es mir möglich, ein bestehendes Video im .m3u8 Format auf meiner Testseite einzubetten und die mehreren Tonspuren auszuwählen. Im nächsten Schritt will ich das Konzept auf mein eigenes Videomaterial anwenden. Das Ganze ging dabei nicht so einfach wie ursprünglich gedacht.

.m3u8

Das Format .m3u8 beinhaltet im Grunde nur die Verlinkungen zu den einzelnen Video- und Tonspuren, die man in seine Timeline einbinden will. Daher bin ich nicht davon ausgegangen, dass es zu schwierig wird, selbst ein solches Video aufzubereiten.

Mit einem kurzen Blick in die Konfigurationsdatei bestehender Videos ist jedoch eines schnell klar geworden: Es wird nicht ganz so einfach. Mein ursprünglicher Plan einfach ein bestehendes File manuell umzuschreiben, ist damit zusammengefallen.

Beispielhafte .m3u8 Datei

#EXTM3U
## Generated with https://github.com/google/shaka-packager version v2.3.0-5bf8ad5-release

#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-eng-0128k-aac-2c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="en",NAME="stream_5",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2"
#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-deu-0128k-aac-2c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="de",NAME="stream_4",AUTOSELECT=YES,CHANNELS="2"
#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-ita-0128k-aac-2c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="it",NAME="stream_8",AUTOSELECT=YES,CHANNELS="2"
#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-fra-0128k-aac-2c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="fr",NAME="stream_7",AUTOSELECT=YES,CHANNELS="2"
#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-spa-0128k-aac-2c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="es",NAME="stream_9",AUTOSELECT=YES,CHANNELS="2"
#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-eng-0384k-aac-6c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="en",NAME="stream_6",CHANNELS="6"

#EXT-X-MEDIA:TYPE=SUBTITLES,URI="playlist_s-en.webvtt.m3u8",GROUP-ID="default-text-group",LANGUAGE="en",NAME="stream_0",DEFAULT=YES,AUTOSELECT=YES
#EXT-X-MEDIA:TYPE=SUBTITLES,URI="playlist_s-el.webvtt.m3u8",GROUP-ID="default-text-group",LANGUAGE="el",NAME="stream_1",AUTOSELECT=YES
#EXT-X-MEDIA:TYPE=SUBTITLES,URI="playlist_s-fr.webvtt.m3u8",GROUP-ID="default-text-group",LANGUAGE="fr",NAME="stream_2",AUTOSELECT=YES
#EXT-X-MEDIA:TYPE=SUBTITLES,URI="playlist_s-pt-BR.webvtt.m3u8",GROUP-ID="default-text-group",LANGUAGE="pt-BR",NAME="stream_3",AUTOSELECT=YES

#EXT-X-STREAM-INF:BANDWIDTH=8062646,AVERAGE-BANDWIDTH=1824731,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=768x576,AUDIO="default-audio-group",SUBTITLES="default-text-group"
playlist_v-0576p-1400k-libx264.mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=6096050,AVERAGE-BANDWIDTH=1410993,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=640x480,AUDIO="default-audio-group",SUBTITLES="default-text-group"
playlist_v-0480p-1000k-libx264.mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4005148,AVERAGE-BANDWIDTH=1146764,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=480x360,AUDIO="default-audio-group",SUBTITLES="default-text-group"
playlist_v-0360p-0750k-libx264.mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2190444,AVERAGE-BANDWIDTH=784019,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=320x240,AUDIO="default-audio-group",SUBTITLES="default-text-group"
playlist_v-0240p-0400k-libx264.mp4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=827972,AVERAGE-BANDWIDTH=482170,CODECS="avc1.42c01e,mp4a.40.2",RESOLUTION=192x144,AUDIO="default-audio-group",SUBTITLES="default-text-group"
playlist_v-0144p-0100k-libx264.mp4.m3u8

Außerdem hat jede zugehörige Video- und Sounddatei ein zusätzliches Konfigurationsdokument dabei. Es musste ein Renderer her, der mir mit Input des Videos und der zwei Tonspuren ein .m3u8 generiert.

Shaka Packager

Bei der Analyse der obigen .m3u8 Datei ist mir der obersten Zeile die Verlinkung des Shaka Packagers aufgefallen. Das hat mich auf die GitHub-Seite des Open Source Projektes von Google gebracht, mit dem man genau solche Dateien verpacken kann.

Anhand dieses Tutorials von Monir Zaman ist es mir dann nach mehreren Versuchen gelungen, endlich eigene .m3u8 Dateien zu generieren.

Mit den Infos der Dokumentation von Shaka Packager im Zusammenhang mit HLS-Videoformaten konnte ich mir den richtigen Befehl zusammenschreiben.

Auszug aus dem Terminal. Beim 10. Versuch hat es dann endlich funktioniert.

Lokaler Test mit VLC

Mit dieser .m3u8 Playlist konnte ich im VLC-Player die Audiospuren testen und es hat tatsächlich funktioniert.

Hosting

Der nächste Schritt hat sich tatsächlich auch komplizierter herausgestellt, als ursprünglich vermutet. Mit meinem AWS-Zugang – Amazon Web Services; also meinem Webserver – dachte ich, mit hochladen, Link generieren und in meinen bestehenden Prototypen verknüpfen hat es sich erledigt.

Tatsächlich sind die Zugriffsrechte für .m3u8 auf Webservern etwas verwirrend.

Das Troubleshooting hat hier länger gedauert, als ich zugeben will – solche Dinge dauern teilweise Tage, um sie wirklich zu verstehen.

Gott sei Dank bin ich über die offizielle AWS-Dokumentation und einem großartigen Artikel zu dem Thema auf die Lösung gestoßen.

Kompatibilität

Was super auf dem Computer funktioniert, muss natürlich am iPhone wieder versagen.

Anhand der detaillierten Dokumentation auf Apples Developer Website konnte ich aber die Fehlerquelle (wahrscheinlich) identifizieren.

Das Video auf HEVC/H.265 neu gerendert und alle anderen Schritte wiederholt—jetzt funktioniert es auch am Handy.

Notlösung

Bei der ganzen Recherche und Coding-Arbeit ist mir wieder das Format MPEG-H Audio vom Fraunhofer Institut eingefallen, welches auch mehrere Tonspuren unterstützt. Das ist in den Recherchen jedoch nie aufgetaucht und meine jetzige Lösung funktioniert mittlerweile.

Das wollte ich hier nur kurz als Randnotiz erwähnen.

Weiter

Alles Technische ist jetzt beiseite geräumt. Also wird jetzt der Inhalt fertig gebaut und weitere Einzelheiten der Umfrage werden skizziert, damit sie auf die Website implementiert werden können.