Was ist das gemeinsame Medienanwendungsformat (CMAF)?

Das gemeinsame Medienanwendungsformat (CMAF) ist ein MPEG-Standard, ISO/IEC 23000-19, für Encoding und Paketierung segmentierter Medien als fragmentiertes MP4. Es legt Spurstruktur, Verschlüsselung und Medienprofile fest, damit HLS und DASH auf dieselben Medienobjekte verweisen können.

So funktioniert das gemeinsame Medienanwendungsformat (CMAF)

CMAF definiert Medienobjekte, kein Manifest oder Auslieferungsprotokoll; die Medienpräsentation bleibt einem abstrakten Anwendungsmodell überlassen, das sowohl HLS als auch DASH implementieren. Eine CMAF-Spur enthält eine Medienart (Video, Audio oder Untertitel) und besteht aus einem CMAF-Header, der einen Decoder initialisiert, gefolgt von Fragmenten. Alternative Encodings desselben Inhalts, zwischen denen ein Player an Fragmentgrenzen wechseln kann, bilden eine Umschaltgruppe. Umschaltgruppen desselben Medientyps, etwa für verschiedene Sprachen oder Codecs, bilden eine Auswahlgruppe, und eine Medienpräsentation kombiniert synchronisierte Auswahlgruppen. Für die Auslieferung werden Fragmente zu Segmenten zusammengefasst oder in Chunks unterteilt. Eine HLS-Medienplaylist listet die Segmente einer Spur auf und verweist mit EXT-X-MAP auf deren Header. Eine DASH-MPD kann dieselben Dateien adressieren.

Wichtige Fakten

  1. CMAF-Spuren enthalten jeweils einen Medientyp, daher werden Audio und Video getrennt paketiert und angefordert. Laut den HLS-Empfehlungen von Apple können CMAF-Segmente im Allgemeinen nicht mehrere Medientypen enthalten, sollte es pro CMAF-Spur eine Medienplaylist geben und benötigt jedes Segment ein Tag EXT-X-MAP, das auf den CMAF-Header der Spur verweist. Multiplexierte Transportstream-Segmente müssen daher neu paketiert und nicht umbenannt werden. Ein Player benötigt den passenden Header, bevor er ein Segment decodieren kann.
  2. Ein Segment besteht aus einem oder mehreren vollständigen Fragmenten; ein Chunk ist eine zusammenhängende Teilmenge der Samples eines Fragments. Fragmente sind unabhängig voneinander decodierbar, und Player wechseln Varianten an Fragmentgrenzen. Chunks dienen dazu, die Latenz zu senken: Sie können veröffentlicht werden, bevor das Fragment vollständig ist. DASH-IF weist jedoch darauf hin, dass sie weder für Bitratenwechsel noch für wahlfreien Zugriff erzeugt werden. Auch die Auslieferungskette und der Player müssen zusammenwirken: Die Empfehlungen von DASH-IF für niedrige Latenz verlangen HTTP-Übertragung mit Chunked-Transfer-Encoding von der Einspeisung in den Packager bis zum CDN-Randknoten und stellen separate Anforderungen an Clients mit niedriger Latenz. HLS stellt Chunks als Teilsegmente bereit, die in der Playlist aufgeführt werden, und definiert seinen Modus mit niedriger Latenz als Kombination aus Teilsegmenten, blockierendem Neuladen der Playlist und Vorabhinweisen zum Laden.
  3. CMAF sorgt nicht dafür, dass eine einzige verschlüsselte Kopie auf jedem Gerät nutzbar ist. Es definiert Präsentationsprofile für unverschlüsselte Inhalte, Verschlüsselung mit cbcs und Verschlüsselung mit cenc. Apple gibt an, dass HLS nur unverschlüsselte Inhalte und cbcs unterstützt. Microsoft dokumentiert die Unterstützung von cbcs in PlayReady ab Version 4.0 des Clients als optionale Funktion, während frühere Clients auf cenc beschränkt sind. Eine Kopie mit cbcs schließt daher Geräte mit PlayReady vor Version 4.0 aus, und eine Kopie mit cenc schließt die HLS-Player von Apple aus. Prüfen Sie die DRM-Clientversionen der Zielgeräte, bevor Sie die verschlüsselte Auslieferung mit einer einzigen Kopie planen.
  4. CMAF über HLS benötigt Player, die fragmentiertes MP4 unterstützen. Apple datiert die Unterstützung von fMP4-Segmenten in der HLS-Spezifikation auf September 2016, weist darauf hin, dass Clients auf Basis früherer Revisionen CMAF-Inhalte wahrscheinlich nicht verarbeiten können, und nennt iOS 10, macOS 10.12 und tvOS 10 als erste Apple-Versionen, die dies voraussichtlich können. Bei den Protokollversionen verlangt der HLS-Entwurf Kompatibilitätsversion 6 oder höher für EXT-X-MAP in einer Medienplaylist, die nicht auf I-Frames beschränkt ist. Die Dokumentation des HLS-Muxers von FFmpeg gibt dagegen an, dass fMP4-Segmente ab HLS-Version 7 verwendet werden können, und beschreibt Transportstream-Segmente als mit allen HLS-Versionen kompatibel. Apples Liste deckt nur die eigenen Plattformen ab. Testen Sie daher die fMP4-Wiedergabe auf anderen Geräten, die Sie weiter unterstützen müssen; HLS-Clients, die fMP4 nicht abspielen können, benötigen weiterhin eine Transportstream-Variante neben der CMAF-Variante.

Wann das gemeinsame Medienanwendungsformat (CMAF) relevant ist

Verwenden Sie CMAF, wenn derselbe Inhalt sowohl HLS- als auch DASH-Player erreichen muss und Sie einen Satz Segmente im Speicher und CDN-Cache statt zwei Sätzen vorhalten möchten. Das lohnt sich nur, wenn sich die Fähigkeiten der Zielplayer überschneiden: Jeder Client muss fragmentiertes MP4 abspielen, die gewählten Codecs decodieren und bei geschützten Inhalten dasselbe Verschlüsselungsschema unterstützen. CMAF liefert keine Manifeste. Sie veröffentlichen daher weiterhin eine HLS-Playlist und eine DASH-MPD, die auf die gemeinsamen Segmente verweisen.

So hilft Transloadit beim gemeinsamen Medienanwendungsformat (CMAF)

Der Robot /video/adaptive von Transloadit hat den Parameter technique mit dem Wert cmaf. Dokumentiert ist dafür eine FFmpeg-basierte CMAF-Ausgabe mit MPEG-DASH- und HLS-Manifesten, die auf dieselben fMP4-Segmente verweisen. Bei dieser Technik benennt playlist_name das DASH-Manifest und hls_playlist_name die HLS-Master-Playlist. Normalerweise erzeugt zunächst /video/encode die Varianten, anschließend kommt dieser Robot zum Einsatz.

Laut Dokumentation werden mit cmaf alle Audiodaten in einer einzigen Adaptationsgruppe zusammengefasst, die mit der ersten Audiosprache gekennzeichnet ist. Bei Eingaben mit mehr als einer bekannten Audiosprache wird eine Warnung zur Assembly hinzugefügt; für mehrsprachiges Audio empfiehlt die Dokumentation technique: "hls" mit audio_group: true. Die Robot-Seite beschreibt keine Optionen zur Inhaltsverschlüsselung oder für Chunks mit niedriger Latenz.

Entdecken Sie Transloadits Möglichkeiten für Dateiformate & Komprimierung

Quellen

Machen Sie aus Medienwissen eine funktionierende Pipeline

Verbinden Sie Uploads, Verarbeitung, KI, Storage und Auslieferung über eine deklarative API – um Encoding-Stack, Skalierung und ständig wechselnde Formate müssen Sie sich nicht selbst kümmern.

Transloadit kostenlos ausprobieren