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
- 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. - Die Program Association Table auf PID
0x0000listet 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 durchEXT-X-MAPbereitgestellt 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. - 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.
- 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.
- Audio- und Videoformate nach FFmpeg-Stack
- Robot für Video-Encoding: Segmentoptionen
- Robot für adaptives Video-Streaming
Entdecken Sie Transloadits Möglichkeiten für Dateiformate & Komprimierung
Quellen
- ITU-T H.222.0 | ISO/IEC 13818-1: Allgemeines Encoding bewegter Bilder und zugehöriger Audioinformationen: Systeme
- RFC 8216: HTTP Live Streaming, Abschnitt 3 Mediensegmente und Abschnitt 3.2 Transportstreams nach MPEG-2
- Apple: HLS-Authoring-Spezifikation für Apple-Geräte
- RFC 6990: Erweiterter Berichtsblock (XR) des RTP Control Protocol (RTCP) zur Meldung statistischer Metriken zur unabhängigen Decodierbarkeit programmspezifischer Informationen (PSI) in Transportstreams (TS) nach MPEG-2, Abschnitt 3
- ETSI EN 300 421: DVB-Rahmenstruktur, Kanalcodierung und Modulation für Satellitendienste
- FFmpeg n8.0: libavformat/mpegts.h (Konstanten für Paketgrößen)