Was ist MPEG-TS?

MPEG-TS (Transportstream nach MPEG-2) ist ein paketierter Container, der die Video-, Audio- und Datenstreams eines oder mehrerer Programme zusammen mit den Tabellen, die sie beschreiben, multiplexiert. Dateien mit diesem Container verwenden häufig die Dateiendung .ts. Er wurde für fehleranfällige Umgebungen wie die Rundfunkübertragung entwickelt.

So funktioniert MPEG-TS

Ein MPEG-Transportstream teilt Elementarstreams und Signalisierungstabellen in Pakete fester Größe mit 188 Byte auf, die jeweils eine Paketkennung (PID) mit 13 Bit tragen. Ein Empfänger liest die Program Association Table auf PID 0, folgt deren Verweisen zur Program Map Table jedes Programms und erfährt daraus, welche PIDs die Video-, Audio- und Datenstreams des Programms enthalten. Ein Kontinuitätszähler für jede PID außer der Nullpaket-PID hilft, verlorene Pakete zu erkennen. Ein gesetztes Transportfehlerindikator-Bit im jeweiligen Paketheader kennzeichnet mindestens einen nicht korrigierbaren Bitfehler in diesem Paket. Program Clock References sind die Zeitstempel, aus denen das Decoder-Timing abgeleitet wird. Ein Multiplex kann mehrere Programme mit unabhängigen Zeitbasen enthalten. Da ein Empfänger mitten in einen Stream einsteigen kann, werden die Tabellen normalerweise regelmäßig erneut übertragen. Der Standard empfiehlt dies, ohne eine Häufigkeit festzulegen.

Wichtige Fakten

  1. Ein Transportstream-Paket ist immer 188 Byte groß und beginnt mit dem Synchronisationsbyte 0x47. Davon entfallen 4 auf den Header, sodass die Paketrahmung mindestens 2,1 % beansprucht, noch vor Adaptationsfeldern, PES-Headern oder Füllbytes. Manche Systeme ergänzen jedes Paket um zusätzliche Bytes: Die DVB-Satellitenübertragung hängt 16 Byte Reed-Solomon-Paritätsdaten an und erreicht so 204. Der Demuxer von FFmpeg prüft auch auf eine Variante mit 192 Byte. Ein Parser, der von einer Schrittweite von 188 Byte ausgeht, verliert daher bei solchen Aufzeichnungen die Synchronisation.
  2. Die Program Association Table auf PID 0x0000 listet jedes Programm und die PID seiner Program Map Table auf, die wiederum die PIDs der Elementarstreams dieses Programms enthält. HLS schränkt dies ein: Jedes Transportstream-Segment muss genau ein Programm enthalten sowie eine PAT und eine PMT, die seine ersten beiden Pakete sein sollten, sofern sie nicht durch EXT-X-MAP bereitgestellt werden. Auch Zeitstempel und Kontinuitätszähler müssen von einem Segment zum nächsten fortgeführt werden, sofern die Playlist keine Diskontinuität markiert. Eine Rundfunkaufzeichnung mit mehreren Programmen muss daher auf ein Programm reduziert werden, bevor sie als HLS-Segmente dienen kann.
  3. Der Kontinuitätszähler ist ein Wert mit 4 Bit pro PID, der bei jedem Paket mit Nutzdaten um eins erhöht wird und nach 15 wieder bei null beginnt. Bei Paketen, die nur ein Adaptationsfeld enthalten, und bei einem unmittelbar wiederholten Duplikat darf er unverändert bleiben. Er darf springen, wenn der Stream den Diskontinuitätsindikator setzt, und ist bei Nullpaketen nicht definiert. Jeder andere Wert ist ein Kontinuitätsfehler. Als Ursachen nennt RFC 6990 ein verlorenes Paket, eine falsche Paketreihenfolge oder ein Paket, das mehr als zweimal vorkommt. Ist Paketverlust die Ursache, ergibt die Sprungweite die Anzahl fehlender Pakete mit Nutzdaten nur modulo 16. Gehen also genau 16 Pakete oder ein Vielfaches von 16 verloren, bleibt keine Lücke im Zähler.
  4. Durch Remultiplexen lässt sich ein einzelnes Programm aus einem Stream mit mehreren Programmen extrahieren. Außerdem lassen sich Nullpakete einfügen oder entfernen, um die Transportbitrate zu ändern. Beides ist möglich, ohne Audio oder Video erneut zu komprimieren. Der Remultiplexer muss möglicherweise die Werte der Programmtaktreferenz korrigieren, weil sich ihre Positionen im Stream ändern. Das Extrahieren allein macht ein Programm noch nicht HLS-tauglich: RFC 8216 empfiehlt, dass jedes Segment in H.264 ein IDR-Frame enthält. Apples HLS-Authoring-Spezifikation akzeptiert ausschließlich Video in H.264, HEVC, Dolby Vision oder AV1, verlangt für HEVC fMP4 statt Transportstreams, schreibt ein IDR-Frame am Anfang jedes Videosegments vor und verlangt Deinterlacing für sämtliche Quellinhalte im Zeilensprungverfahren. Ein Rundfunkprogramm muss erneut codiert werden, wenn die Zielplayer seinen Codec nicht akzeptieren oder seine Keyframes nicht an nutzbaren Segmentgrenzen liegen. Dasselbe gilt für Rundfunkvideo im Zeilensprungverfahren, das Apples Spezifikation erfüllen muss.

Wann MPEG-TS relevant ist

Wählen Sie MPEG-TS für Rundfunk, IPTV, Zuführungsstreams oder die Auslieferung herkömmlicher HLS-Segmente. Seine Robustheit und Multiplexing-Unterstützung verursachen zusätzlichen Overhead gegenüber Containern, die für die zuverlässige Dateispeicherung optimiert sind.

So hilft Transloadit bei MPEG-TS

Transloadits FFmpeg-basierte Robots führen MPEG-TS unter den Formaten auf, die sie lesen und schreiben können. /video/encode bietet die Option segment, die seine Ausgabe für HTTP Live Streaming in Teile aufteilt. Deren Namen werden durch segment_prefix festgelegt (das Präfix segment_ ergibt segment_0.ts, segment_1.ts und so weiter). /video/adaptive verpackt Varianten für HLS, MPEG-DASH oder CMAF und schreibt die Playlist oder das Manifest.

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