Was ist M3U8?
M3U8 ist die UTF-8-Form des Multimedia-Playlist-Formats M3U und wird häufig für HTTP-Live-Streaming-Manifeste verwendet. Seine Texteinträge können Varianten, Segmente, Schlüssel und Metadaten zu Datumsbereichen beschreiben.
So funktioniert M3U8
Ein M3U8-Dokument ist eine zeilenorientierte UTF-8-Textdatei. Jede Zeile ist eine URI, ist leer oder beginnt mit #. Zeilen, die mit #EXT beginnen, sind Tags; andere Zeilen mit # sind Kommentare. Bei HLS weist eine Multivarianten-Playlist Variantenstreams und alternative Medienvarianten aus, während eine Medien-Playlist die Mediensegmente einer Medienvariante auflistet. Clients wechseln je nach Netzwerkbedingungen zwischen Varianten und laden eine Medien-Playlist regelmäßig neu, sofern diese nicht erklärt, dass sie sich nicht mehr ändern wird, wie unten beschrieben. Packager schreiben diese Playlists nach dem Encoding und der Segmentierung der Medien.
Wichtige Fakten
#EXTM3Umuss die erste Zeile jeder HLS-Playlist sein. Manche Tags wie#EXT-X-VERSIONund#EXT-X-TARGETDURATIONgelten für die gesamte Playlist, während sich Mediensegment-Tags auf nachfolgende Einträge beziehen:#EXTINFist für jedes Mediensegment erforderlich und gilt nur für die nächste Segment-URI. Einige andere Tags gelten für alle folgenden Segmente bis zur nächsten Instanz desselben Tags. Das Verschieben, Löschen oder Einfügen von Tag- und URI-Zeilen kann daher die Bedeutung ändern, selbst wenn das Ergebnis weiterhin gültiger Text ist.- Eine Playlist gehört zu einer von zwei Arten, niemals zu beiden. Eine Multivarianten-Playlist, in RFC 8216 als Master-Playlist bezeichnet, beschreibt Variantenstreams und verweist auf andere Playlists. Eine Medien-Playlist listet die Segmente einer Medienvariante in Wiedergabereihenfolge auf. RFC 8216 verlangt, dass Clients beim Parsen einer Playlist mit einem Fehler abbrechen, wenn diese Mediensegment-Tags mit Master-Playlist-Tags mischt.
- Relative URIs werden anhand der URI der Playlist aufgelöst, die sie enthält. Das Verschieben einer Playlist kann daher ihre Zieladressen ändern. Behalten Sie die relative Anordnung der referenzierten Dateien bei oder aktualisieren Sie die URIs. Bei der standardmäßigen URI-Auflösung übernimmt eine relative Referenz mit eigenem Pfad nicht den Query-String der Basis-URI. Ein Token oder eine Signatur im Query-String der Playlist-URL wird daher nicht auf Anfragen für Segmente, Schlüssel oder untergeordnete Playlists übertragen. Ein Verfahren mit signierten URLs muss deshalb jede referenzierte URI signieren oder diese Anfragen auf andere Weise autorisieren.
- Benennen Sie eine Playlist oder liefern Sie sie so aus, dass Clients sie akzeptieren. RFC 8216 verlangt, dass eine HLS-Playlist entweder an einem URI-Pfad mit der Endung
.m3u8oder.m3uoder am HTTP-Content-Typeapplication/vnd.apple.mpegurloderaudio/mpegurlerkennbar ist. Clients sollten demnach Playlists zurückweisen, die auf keine dieser Arten identifizierbar sind. Der Text muss UTF-8 ohne Byte-Reihenfolgemarkierung verwenden. Clients sollten beim Parsen einer Playlist mit einer solchen Markierung mit einem Fehler abbrechen.
Wann M3U8 relevant ist
M3U8 ist immer dann relevant, wenn Sie HLS erzeugen, hosten oder einlesen. Wer eine Playlist erzeugt, muss Tag-Reihenfolge, Dauern und URIs korrekt angeben, damit sie gültig ist. Wer sie hostet, muss jede darin enthaltene URI erreichbar halten, unabhängig davon, von wo die Playlist ausgeliefert wird. Behandeln Sie eine Playlist aus einer nicht vertrauenswürdigen Quelle als Liste von Abrufanweisungen: RFC 8216 weist darauf hin, dass Clients Netzwerkanfragen an beliebige Ziele stellen; die URIs der Playlist geben ihnen diese Ziele vor. Der HLS-Demuxer von FFmpeg beschränkt standardmäßig, welche Dateiendungen eine Playlist referenzieren darf.
Arbeiten mit M3U8
RFC 8216 verlangt, dass Clients eine Medien-Playlist regelmäßig neu laden, sofern sie nicht #EXT-X-PLAYLIST-TYPE:VOD oder #EXT-X-PLAYLIST-TYPE:EVENT zusammen mit #EXT-X-ENDLIST deklariert. Solange einer Medien-Playlist #EXT-X-ENDLIST fehlt, muss der Server zwischen 0,5 und 1,5 Zieldauern nach der vorherigen Version eine neue Version mit mindestens einem neuen Segment veröffentlichen. Fügen Sie #EXT-X-ENDLIST hinzu, sobald das letzte Segment aufgeführt ist, und verwenden Sie #EXT-X-PLAYLIST-TYPE:VOD, um zu erklären, dass die Playlist nicht mehr geändert werden kann. Eine wachsende Playlist ändert sich unter einer festen URL, ihre Segmente dagegen nicht. Richten Sie die Cache-Planung an dieser Eigenschaft aus.
So hilft Transloadit bei M3U8
Der Robot /video/adaptive von Transloadit erzeugt M3U8-Playlist-Dateien zusammen mit den Mediensegmenten, wenn sein Parameter technique den Wert hls hat, und eine HLS-Playlist neben dem MPEG-DASH-Manifest, wenn der Wert cmaf ist.
Laut Robot-Dokumentation enthalten die Ergebnisdateien die Metadateneigenschaft relative_path. Der Speicherpfad sollte daraus gebildet werden, damit die Playlist-Dateien weiter funktionieren. Dies setzt die oben beschriebene Regel für relative URIs praktisch um. Die Dokumentation nennt außerdem die CORS-Antwortheader, die für Browser-Player zu konfigurieren sind, wenn die Browser-Player Playlists und Segmente von einem anderen Ursprung abrufen.
Entdecken Sie Transloadits Möglichkeiten für Dateiformate & Komprimierung
Quellen
- RFC 8216: HTTP Live Streaming, Abschnitt 4 (Playlists), Abschnitt 4.1 (Definition einer Playlist), Abschnitt 4.3 (Playlist-Tags), Abschnitte 6.2.1, 6.3.1, 6.3.2, 6.3.4 und Abschnitt 10 (Sicherheitsaspekte)
- IETF-Internet-Draft: HTTP Live Streaming, Ausgabe 2 (draft-pantos-hls-rfc8216bis), Entwurf in Arbeit, der die Master-Playlist in Multivarianten-Playlist umbenennt
- RFC 3986: Uniform Resource Identifier (URI): generische Syntax, Abschnitt 5.2.2 (Transformation von Referenzen)
- FFmpeg-Formatdokumentation: Optionen des hls-Demuxers (allowed_extensions, extension_picky)