Was ist das M4S-Format?
M4S ist eine gängige Dateiendung für fragmentierte MP4-Mediensegmente, die MPEG-DASH und modernes HLS verwenden. Ein Segment benötigt in der Regel ein Initialisierungssegment für die Konfiguration der Spuren und des Decoders.
So funktioniert das M4S-Format
M4S-Mediensegmente sind kurze Ressourcen im fragmentierten MP4-Format, die entstehen, nachdem die Ausgabe eines Encoders für adaptives Streaming aufgeteilt wurde. Ihre Movie-Fragment-Metadaten ordnen Samples Zeitangaben und Speicherorte zu, während die zugehörigen Mediendaten-Boxen die codierten Samples enthalten. Spurdefinitionen und Decoder-Konfiguration befinden sich normalerweise in einer Initialisierungsressource, auf die das Manifest verweist und die manche Packager ebenfalls mit .m4s benennen. Ein Player kombiniert diese Konfiguration beim Puffern und Wechseln zwischen Repräsentationen mit aufeinanderfolgenden Fragmenten.
Wichtige Fakten
- Ein Mediensegment besteht aus einem oder mehreren Movie-Fragmenten: einer Box
moof, die die Samples beschreibt, gefolgt von einer oder mehreren Boxenmdat, die deren codierte Bytes enthalten. Optional steht davor eine Segmenttyp-Boxstyp. Es enthält keine Boxmoov, daher befinden sich die Spur- und Sample-Beschreibungen, die ein Decoder benötigt, nicht in der Datei. - Das Initialisierungssegment liefert, was den Mediensegmenten fehlt: eine Box
ftyp, gefolgt von einer Boxmoovmit Spur- und Sample-Beschreibungen, aber ohne Samples. In HLS muss für jedes fragmentierte MP4-Mediensegment ein passendes TagEXT-X-MAPgelten, dessen URI die Ressource mit diesen Initialisierungsdaten angibt. Ein Tag gilt für jedes folgende Segment bis zum nächstenEXT-X-MAP. In Media Source Extensions muss ein Mediensegment ohne Segmenttyp-Box den im Initialisierungssegment deklarierten Brands entsprechen. - Die Dateiendung verrät nicht, um welchen der beiden Dateitypen es sich handelt.
.m4sist bei der IANA als Dateiendung des Medientypsvideo/iso.segmentregistriert, doch die Dateinamen bestimmt der Packager: Wenn der DASH-Muxer von FFmpeg MP4-Segmente als separate Dateien schreibt, erhalten standardmäßig sowohl Initialisierungs- als auch Mediensegmente die Dateiendung.m4s(für Streams mit VP8, VP9, Vorbis oder Opus verwendet er standardmäßig WebM-Segmente namens.webm). Der HLS-Muxer nennt die fragmentierte MP4-Initialisierungsdatei dagegen standardmäßiginit.mp4. Bestimmen Sie die Rolle einer Datei anhand des Manifests oder ihrer Boxen auf oberster Ebene. - Ein Name mit
.m4sbelegt keine CMAF-Konformität. CMAF ist ein stärker eingeschränktes Profil von fragmentiertem MP4, und FFmpeg behandelt CMAF-kompatible und DASH-kompatible Ausgaben als separate Muxer-Modi. Die tatsächlichen Anforderungen hängen vom Zielprotokoll ab: HLS verlangt beispielsweise eine Boxtfdtin jedem Spurfragment sowie eine Adressierung relativ zum Movie-Fragment und weist darauf hin, dass ein CMAF-Segment diese Anforderungen erfüllt.
Wann das M4S-Format relevant ist
M4S ist relevant, wenn Sie segmentierte Streams paketieren, hosten, verschieben oder deren Fehler analysieren. Ein Mediensegment ist keine eigenständige Videodatei: Ein Parser benötigt die passenden Initialisierungsdaten, bevor er das Segment lesen kann, und ein Player findet beides über das Manifest oder die Playlist. Wenn Sie einen Stream verschieben, bereinigen oder zwischenspeichern, müssen die Verweise im Manifest gültig und alle darin genannten Initialisierungs- und Mediensegmente verfügbar bleiben. Ein einzelnes Mediensegment mit .m4s eignet sich allein nicht als Eingabe für einen allgemeinen Konverter.
So hilft Transloadit beim M4S-Format
Transloadits Robot /video/adaptive dokumentiert für seinen Parameter technique den Wert cmaf, der MPEG-DASH- und HLS-Manifeste erzeugt, die auf dieselben fragmentierten MP4-Segmente verweisen.
Die Robot-Dokumentation spricht von Segmenten und Initialisierungssegmenten, nennt aber keine Dateiendungen. Bauen Sie Ihre Werkzeuge daher nicht auf der Annahme auf, dass der Name .m4s verwendet wird. Sie besagt jedoch, dass jede Ergebnisdatei die Metadateneigenschaft relative_path enthält, damit die Dateien dort gespeichert werden können, wo die Manifeste sie erwarten.
Entdecken Sie Transloadits Möglichkeiten für Dateiformate & Komprimierung
Quellen
- IANA-Medientypregistrierung: video/iso.segment (Dateiendung m4s; Segmente nach ISO/IEC 14496-12)
- W3C: ISO-BMFF-Bytestream-Format (Initialisierungssegmente und Mediensegmente)
- RFC 8216: HTTP Live Streaming, Abschnitt 3.1 (unterstützte Mediensegmentformate), Abschnitt 3.3 (fragmentiertes MPEG-4) und Abschnitt 4.3.2.5 (EXT-X-MAP)
- FFmpeg-Formatdokumentation: dash-Muxer (init_seg_name, media_seg_name), hls-Muxer (hls_segment_type, hls_fmp4_init_filename) und movflags (cmaf, dash)
- FFmpeg-8.0-Quellcode: libavformat/dashenc.c (Auswahl der Segmentdateiendung)
- Apple: Über das Common Media Application Format mit HTTP Live Streaming (HLS)