Packetized Elementary Stream
Aus open7x0.org
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 | ||||||||||||||||||||||||||||||||||

