Packetized Elementary Stream

Aus open7x0.org

Wechseln zu: Navigation, Suche

Ein Packetized Elementary Stream (kurz PES) bezeichnet einen multiplexten MPEG-Stream, ein Stream Format, in dem mehrere Audio und/oder Video nebeneinander übertragen werden.

Dies Format ist nach dem MPEG2-Standard als solches nicht spezifiziert. Aus diesem Format werden jedoch sowohl TS-Streams als auch PS-Streams gebildet. Es bildet ihre unterste Schicht.

Grundsätzlicher Aufbau

Wie der Name schon sagt werden Elementary Streams, also verschiedene, Audio- bzw. Video-Streams, in Packeten übertragen. Es werden unterschiedliche Video- und Audio-Spuren in kleinen Packeten quasi parallel übertragen.

Jedes Packet enthällt dabei nur Daten eines Video- bzw Audio-Streams. Aus den Packet-Headern ist erkennbar zu welchem Stream die Daten gehören. Weiterhin können in den Headern Synchronisations Informationen übertragen, um die Streams zeitlich synchron ausgeben zu können.

Die Packete der Streams werden so übertragen, dass die Daten unterschiedlicher Streams in kurzen zeitlichen Abständen zu einander liegen.

Beispiel

Hat man zum Beispiel einen Stream mit einer Video- und zwei Audio-Spuren dann könnte der Stream so aussehen:

Video Packet für Zeitpunkt t1 Audio Spur 1 Packet für Zeitpunkt t1 Audio Spur 2 Packet für Zeitpunkt t1 Video Packet für Zeitpunkt t2 Audio Spur 1 Packet für Zeitpunkt t2 Audio Spur 2 Packet für Zeitpunkt t2 Video Packet für Zeitpunkt t3 ...

Aufbau der PES-Packet

Byteorder alle MPEG-Daten ist Big Endian, weswegen alle nachfolgenden Daten so dargestellt.

Jedes PES-Packet beginnt mit einem 3 Byte großen Startcode 00 00 01 gefolgt von der ein Byte großen Stream Id und der zwei Byte großen Länge des PES-Packet in Bytes, die auf diese Feld folgen.

Aufbau des PES-Header:

0 1 2 3 4 5
Start Code: 0x00 0x00 0x01 Stream ID Länge des Packets

Zulässige Streams ID liegen zwischen 0xBC und 0xFF. Die verbleibend IDs werden in Video Streams und für MPEG-Program-Streams verwenden. Es sind keine PES-Packete.

Die wichtigsten Stream-Ids:

Stream ID Stream Type
0xBD Private Stream 1 (z.B.: Dolby Digital, Untertitle, ... )
0xBE Padding Stream
0xBF Private Stream 2
0xC0 - 0xDF MPEG Audio Stream 0 - 31
0xE0 - 0xEF MPEG Video Stream 0 - 15

In Packeten der Streams mit Ids 0xBD und 0xC0 - 0xEF werden in MPEG2 (in MPEG1 sehen diese anders aus) folgende Header Daten angehangen:

6 7 8
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
10 Verschlüsselung Prioritäts Flag Alignment Indicator Copyright Original PTS DTS Flag ESCR Flag ES Rate Flag DSM Flag mehr Copyright Infos (Flag) CRC Flag Extension Flag Header Länge (ab hier)

Das PTS DTS Flag gibt an ob Sychronisations Informationen an den Header angehängt werden. Der Wert 01 ist nicht erlaubt. PTS bedeutet Presention Time Stamp und DTS Decode Time Stamp. Sie geben an wann eine AU (Access Unit: Video bzw Audio Frames) des Streams, die in dem Packet startet, decodiert bzw dargstellt werden soll. Die Timestamps sind in 90kHz angegeben.

Ist das Flag nicht 00 werden folgend Daten angehängt:

PTS DTS Flag 0 1 2 3 4
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
10 0010 PTS 32 ... 30 1 PTS 29 ... 15 1 PTS 14 ... 0 1
11 0011 PTS 32 ... 30 1 PTS 29 ... 15 1 PTS 14 ... 0 1
0001 DTS 32 ... 30 1 DTS 29 ... 15 1 DTS 14 ... 0 1
Persönliche Werkzeuge