Detaillierte Analyse des M3U8-Videoverpackungsformats

Vorwort

Als gängiges Videokapselungsformat verfügt M3U8 über ein breites Anwendungsspektrum und wird nicht nur in On-Demand-Szenarien, sondern auch in Live-Übertragungsszenarien verwendet. Insbesondere im On-Demand-Szenario verwenden die meisten aktuellen Mainstream-Video-On-Demand-Websites die M3U8-Lösung.

Text

Einführung in das Format

Das M3U8-Videokapselungsformat ist eigentlich ein allgemeiner Begriff. Es besteht tatsächlich aus einer m3u8-Indexdatei und mehreren ts-Slice-Dateien. Die Videokodierung ist H264 und die Audiokodierung ist AAC. In vielen Fällen ist Ihnen der Begriff HLS (Http Live Streaming) möglicherweise besser bekannt. Ja, HLS ist ein von Apple vorgeschlagenes HTTP-basiertes Streaming-Netzwerkübertragungsprotokoll und Teil der QuickTime X- und iPhone-Softwaresysteme von Apple. HLS unterstützt nicht nur die TS-Fragmentierung, sondern auch die MP4-Fragmentierung. Letzteres ist jedoch im Allgemeinen zu häufig und die Mainstream-HLS-Lösung verwendet immer noch die TS-Fragmentierung. Unten finden Sie ein Diagramm von der offiziellen Website von Apple.

Arbeitsprinzip

Das Arbeitsprinzip des M3U8-Videokapselungsformats besteht darin, den gesamten Stream basierend auf HTTP in kleine TS-Videodateien aufzuteilen und diese herunterzuladen und jedes Mal nur einen Teil der TS-Videodatei herunterzuladen. Während ein Medienstream abgespielt wird, kann der Client dieselbe Ressource mit unterschiedlichen Raten aus vielen verschiedenen alternativen Quellen herunterladen, sodass sich die Streaming-Sitzung an unterschiedliche Datenraten anpassen und dynamisch wechseln kann. Beim Starten einer Streaming-Sitzung lädt der Client eine m3u8-Datei mit Metadaten herunter, um verfügbare TS-Medienstreams zu finden.

Struktur und Zusammensetzung

Wie oben erwähnt, besteht das M3U8-Verpackungsformat aus einer M3U8-Indexdatei und mehreren TS-Videodateien. Unter diesen spielt die M3U8-Datei als Indexdatei eine wichtige Rolle im gesamten M3U8-Videoverpackungsformat, da sie alle TS-Splits verkettet Dateien.

m3u8-Indexdateien haben bestimmte Formate und Typ-Tags. Schauen wir uns eine sehr einfache Beispieldatei an:

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-TARGETDURATION:8

#EXT-X-MEDIA-SEQUENCE:0

#EXT-X-DISKONTINUITÄT

#EXTINF:7.749667,

index_0000.ts

#EXTINF:5.875000,

index_0001.ts

#EXTINF:3.916667,

index_0002.ts

#EXT-X-ENDLIST

In der obigen Datei können Sie mehrere Tags sehen, die mit # beginnen. Als Nächstes stellen wir die Bedeutung dieser Tag-Felder vor.

EXTM3U

Das Feld EXTM3U ist ein Typbezeichnungs-Tag, das angibt, dass diese Datei zur m3u8-Typdatei gehört. Das Schreibformat ist wie folgt:

#EXTM3U

Alle m3u8-Dateien enthalten dieses Tag, und die erste Zeile der Datei ist dieses Tag.

EXT-X-VERSION

Das Feld EXT-X-VERSION ist eine Beschriftung, die die Versionsnummer angibt. Die 3 in der obigen Beispieldatei gibt an, dass die Versionsnummer der m3u8-Datei 3 ist. Das Schreibformat ist wie folgt:

#EXT-X-VERSION:<n>

Dabei ist n die Versionsnummer. Derzeit ist die häufigste Version von m3u8-Dateien 3. Wenn Sie das ffmpeg-Tool zum Aufzeichnen von RTSP-Videostreams und zum Erstellen von m3u8-Dateien verwenden, ist die verwendete Versionsnummer 3. Die Besonderheit von Version 3 besteht darin, dass sie Gleitkomma-EXTINF-Werte unterstützt.

EXT-X-TARGETDURATION

Das Feld EXT-X-TARGETDURATION ist eine Bezeichnung, die die maximale Dauer aller Fragmente angibt. Beachten Sie, dass es sich um einen gerundeten Wert handelt. Wenn die maximale Dauer der Fragmente in der Fragmentliste in der m3u8-Datei 8,02 beträgt, dann ist die EXT- X-TARGETDURATION-Feld Der Wert ist 8. Das Schreibformat ist wie folgt:

#EXT-X-TARGETDURATION:<s>

Darunter ist s die maximale Fragmentierungsdauer in Sekunden. In der obigen m3u8-Beispieldatei gibt es beispielsweise drei ts-Videosegmente, von denen das längste 7,749667 Sekunden beträgt. Daher ist der Wert des Felds EXT-X-TARGETDURATION 8. Dies unterstützt unsere Schlussfolgerung.

EXT-X-MEDIA-SEQUENZ

Das Feld EXT-X-MEDIA-SEQUENCE ist ein Fragment-Referenzsequenz-Tag. Wenn die m3u8-Datei in einem Live-Übertragungsszenario verwendet wird, wird der Wert dieses Tags als Referenz zum Abspielen des Fragments mit der entsprechenden Sequenznummer verwendet. In diesem Fall ist es jedoch erforderlich, dass sich die Seriennummern aller TS-Fragmente dynamisch ändern und nicht wiederholt werden können. Das Schreibformat ist wie folgt:

#EXT-X-MEDIA-SEQUENCE:<Nummer>

Unter ihnen ist Nummer die Fragmentsequenznummer. Obwohl dieses Tag die abzuspielende Segmentnummer angibt, gibt es auch Sonderfälle. Wenn beispielsweise das EXT-X-ENDLIST-Tag nicht in der m3u8-Indexdatei vorhanden ist, beginnt der Player mit der Wiedergabe vom drittletzten Videosegment. Wenn die Dateiliste die Wiedergabe stoppt, wenn die Anzahl der Slices weniger als drei beträgt. Es gibt jedoch auch einige spezielle Wiedergabebehandlungen, die auch die fortgesetzte Wiedergabe unterstützen.

Wenn das vorherige Videosegment und das nächste Videosegment in der m3u8-Dateiliste nicht aufeinander folgen, ist es wahrscheinlich, dass die Wiedergabe mit dem Player fehlschlägt. Zu diesem Zeitpunkt ist ein magisches Feld-Tag erforderlich – EXT-X-DISCONTINUITY. , das kann dieses Problem leicht lösen.

EXTINF

Das EXTINF-Feld ist eine Bezeichnung, die zur Darstellung der Dauer jedes ts-Videosegments verwendet wird. Das Schreibformat ist wie folgt:

#EXTINF:<Dauer>,[<Titel>]

Darunter ist das Dauerfeld die Fragmentierungsdauer in Sekunden und das Titelfeld optionale Beschreibungsinformationen. Jedes ts-Videofragment verfügt über ein eigenes EXTINF-Tag. In der obigen Beispieldatei beträgt die Dauer der Videodatei index_0000.ts beispielsweise 7,749667 Sekunden, die Dauer der Videodatei index_0001.ts 5,875000 Sekunden und die Dauer der Die Videodatei index_0002.ts ist 3,916667 Sekunden lang. Zusätzlich zu den Informationen zur Dateilänge kann das EXTINF-Tag auch andere beschreibende Informationen enthalten, diese müssen jedoch hauptsächlich durch Kommas getrennt werden.

Das ts-Videofragment im EXTINF-Tag kann direkt mit dem Dateinamen oder dem relativen Pfad wie in der Beispieldatei oben gefüllt werden, oder es kann der absolute Pfad der Videodatei sein, oder natürlich kann es die Netzwerk-On-Demand-Adresse sein der Videodatei.

EXT-X-ENDLIST

Das Feld EXT-X-ENDLIST ist ein Tag, das das Ende der m3u8-Datei angibt. Das Schreibformat ist wie folgt:

#EXT-X-ENDLIST

Dieses Tag wird im Allgemeinen in der letzten Zeile der m3u8-Datei verwendet und dient auch zur Unterscheidung, ob eine bestimmte m3u8-Datei für On-Demand-Szenen oder Live-Übertragungsszenen verwendet wird. Die m3u8-Datei in der On-Demand-Szene enthält das EXT-X-ENDLIST-Tag, und die m3u8-Datei in der Live-Übertragungsszene verfügt nicht über das EXT-X-ENDLIST-Tag.

EXT-X-STREAM-INF

Das Feld EXT-X-STREAM-INF ist ein Tag zur Darstellung eines variablen Videostreams. Das Schreibformat ist wie folgt:

#EXT-X-STREAM-INF:<attribute-list><URI>

Unter diesen enthält die Attributliste mehrere Attributdefinitionen, die im Folgenden vorgestellt werden.

Das Feld BANDWIDTH wird verwendet, um die Bitrate des variablen Videostreams anzugeben. Im Allgemeinen ist dieses Feld unverzichtbar, wenn das Tag EXT-X-STREAM-INF erscheint.

Das Feld AVERAGE-BANDWIDTH wird verwendet, um die durchschnittliche Bitrate des variablen Videostreams anzugeben. Dieses Attribut ist ein optionales Attribut.

Das CODECS- Feld wird verwendet, um die Medienkodierungsinformationen des variablen Videostreams darzustellen, die im Allgemeinen Videokodierungs- und Audiokodierungsinformationen umfassen. Wenn die Audiokodierung beispielsweise AAC-LC und die Videokodierung H.264 Main Profile Level 3.0 ist, sollte der Wert des CODECS-Felds „mp4a.40.2,avc1.4d401e“ lauten. Im Allgemeinen sollte dieses Attribut markiert werden, wenn das EXT-X-STREAM-INF-Tag erscheint.

Das Feld RESOLUTION wird verwendet, um die Auflösung des variablen Videostreams anzugeben. Im Allgemeinen wird dieses Attribut empfohlen, wenn das EXT-X-STREAM-INF-Tag erscheint.

Das Feld FRAME-RATE wird verwendet, um die maximale Bildrate aller Videos im variablen Videostream anzugeben. Dieses Attribut ist ein optionales Attribut.

Das Feld HDCP-LEVEL wird verwendet, um die Schutzstufe für digitale Inhalte mit hoher Bandbreite des variablen Videostreams anzugeben. Der Wert dieses Attributs ist eine Aufzählungszeichenfolge, und die verfügbaren Werte sind „TYPE-0“ und „NONE“. Darunter bedeutet „TYPE-0“, dass der wiedergegebene Videoinhalt durch digitale Inhalte mit hoher Bandbreite geschützt sein muss, andernfalls schlägt die Wiedergabe fehl. „KEINE“ bedeutet, dass es keine Einschränkungen hinsichtlich des Schutzniveaus von Videoinhalten gibt. Dieses Attribut ist ein optionales Attribut.

Das Feld AUDIO wird verwendet, um den Medientyp des variablen Medienstreams anzugeben und um anzugeben, dass der wiedergegebene Inhalt im Audioformat vorliegt. Dieses Attribut ist ein optionales Attribut.

Das VIDEO- Feld wird verwendet, um den Medientyp des variablen Medienstreams anzugeben und um anzugeben, dass der wiedergegebene Inhalt im Videoformat vorliegt. Dieses Attribut ist ein optionales Attribut.

Das Feld SUBTITLES wird verwendet, um den Medientyp des variablen Medienstreams anzugeben und um anzugeben, dass es sich bei dem angezeigten Inhalt um Untertitelinhalte handelt. Dieses Attribut ist ein optionales Attribut.

Das Feld CLOSED-CAPTIONS wird verwendet, um den Medientyp des variablen Medienstreams anzugeben. Es wird verwendet, um anzugeben, dass es sich bei dem angezeigten Inhalt um Erzähluntertitel handelt. Dieses Attribut dient hauptsächlich der Berücksichtigung hörgeschädigter Benutzer. Dieses Attribut ist ein optionales Attribut .

So viel wurde oben vorgestellt, schauen wir uns ein Beispiel an:

#EXTM3U

#EXT-X-STREAM-INF:BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000 http://example.com/low.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=2560000,AVERAGE-BANDWIDTH=2000000 http://example.com/mid.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=7680000,AVERAGE-BANDWIDTH=6000000 http://example.com/hi.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"

http://example.com/audio-only.m3u8

Anhand der obigen Beispieldatei können wir sehen, dass die Haupt-m3u8-Datei vier Unter-m3u8-Dateien enthält, nämlich low.m3u8 mit einer maximalen Bitrate von 1,28 MB und einer durchschnittlichen Bitrate von 1 MB und low.m3u8 mit einer maximalen Bitrate Rate von 2,56 MB und einer durchschnittlichen Bitrate von 1 MB. Es ist mid.m3u8 mit 2 MB, hi.m3u8 mit einer maximalen Bitrate von 7,68 MB und einer durchschnittlichen Bitrate von 6 MB und audio-only.m3u8 mit a maximale Bitrate von 65K und Audiokodierung von HE-AAC.

EXT-X-BYTERANGE

Das Feld EXT-X-BYTERANGE ist eine Bezeichnung, die zur Darstellung einer Teilmenge der Dateiressourcen verwendet wird, die dem URI entsprechen. Das Schreibformat ist wie folgt:

#EXT-X-BYTERANGE:<n>[@<o>]

Unter diesen stellt n die Anzahl der Bytes der Teilmenge dar, und o ist optional und gibt die Startposition der Teilmenge an, die dem vom Anfang der Ressource berechneten Offset entspricht. Wenn o undefiniert ist, ist seine Startposition das Byte neben der Endposition der vorherigen Teilmenge. Beachten Sie, dass dieses Label nur in M3U8 Version 4.0 und höher verfügbar ist.

EXT-X-PLAYLIST-TYPE

Das Feld EXT-X-PLAYLIST-TYPE enthält die Typinformationen, die für die Wiedergabeliste verwendet werden. Das Schreibformat ist wie folgt:

#EXT-X-PLAYLIST-TYPE:<type-enum>

Unter diesen ist type-enum ein String-Aufzählungstyp, „EVENT“ oder „VOD“. Dieses Attribut ist ein optionales Attribut.

abschließend

Dieser Artikel konzentriert sich auf die Zusammenfassung und Einführung des Funktionsprinzips und der allgemeinen Tags des M3U8-Videokapselungsformats. Aufgrund seiner integrierten Fragmentierungsfähigkeiten bietet das M3U8-Format inhärente Vorteile bei der Speicherung sehr großer Videodateien. Daher sind viele Videos auf Abruf verfügbar Websites verwenden dieses Kapselungsformat weitgehend.

Als Bonus für diesen Artikel erhalten Sie ein kostenloses C++-Audio- und Video-Lernmaterialpaket + Lernroutenübersicht, technische Videos/Codes, einschließlich (Audio- und Videoentwicklung, Interviewfragen, FFmpeg, webRTC, rtmp, hls, rtsp, ffplay, Codec, Push-Pull-Streaming, SRS )↓↓↓↓↓↓Siehe unten↓↓Klicken Sie unten im Artikel, um es kostenlos zu erhalten↓↓

Je suppose que tu aimes

Origine blog.csdn.net/m0_73443478/article/details/135219876
conseillé
Classement