Projekte > MPEG-1/2 Video > MPEG-2 Multiplexed Stream

Video/Audio Packet Header

Mehrere Video Pakete wechseln sich mit einem Audio Paket im Verhältnis der Bitrate ab. Der Header ist bei MPEG-2 deutlich komplexer als bei MPEG-1.

Aufbau

  • 3 Byte: PACKET_START_CODE_PREFIX = $000001
  • 1 Byte: Stream ID - Video $E0 - $EF, Audio $C0 - $DF
  • 2 Byte: Paketlänge - ohne die Bytes bis hier
     
  • 2 Bit: immer auf 10 gesetzt.
  • 2 Bit: Scrambling Control - 00 Payload ist verschlüsselt.
  • 1 Bit: Priorität. 1 ist höher als 0.
  • 1 Bit: Alignment.
  • 1 Bit: Copyright.
  • 1 Bit: Original.

Nun folgen einige Flags, welche mit der darauf folgenden Datenstruktur korrespondieren:

  • 1 Bit: Flag für PTS (Presentation Time Stamp).
  • 1 Bit: Flag für DTS (Decoding Time Stamp) - nur wenn PTS gesetzt ist.
  • 1 Bit: ESCR (Elementar Stream Clock Reference)
  • 1 bit: ES Rate
  • 1 Bit: DSM Trick mode
  • 1 Bit: Weitere Copyright Informationen
  • 1 Bit: CRC
  • 1 Bit: Extension Flags
  • 1 Byte: Länge der Header Daten, welche sich auf Grund der Flags anschliessen. Darin eingeschlossen sind auch die Füllbytes.

Ist das Flag für PTS gesetzt, kommen diese 5 Byte hinzu:

  • 4 Bit: 0010 wenn nur PTS angegeben wird, 0011 wenn ein DTS Datenblock folgt.
  • 3 Bit: Presentation Time Stamp Bit 32-30
  • 1 Bit: Marker
  • 15 Bit: Presentation Time Stamp Bit 29-15
  • 1 Bit: Marker
  • 15 Bit: Presentation Time Stamp Bit 14-0
  • 1 Bit: Marker

Ist das Flag für DTS gesetzt, kommen diese 5 Byte hinzu:

  • 4 Bit: Gesetzt auf 0001
  • 3 Bit: Decoding Time Stamp Bit 32-30
  • 1 Bit: Marker
  • 15 Bit: Decoding Time Stamp Bit 29-15
  • 1 Bit: Marker
  • 15 Bit: Decoding Time Stamp Bit 14-0
  • 1 Bit: Marker

Ist das Flag für ESCR gesetzt, kommen diese 6 Byte hinzu:

  • 2 Bit: Reserviert
  • 3 Bit: Elementar Stream Clock Reference Bit 32-30
  • 1 Bit: Marker
  • 15 Bit: Elementar Stream Clock Reference Bit 29-15
  • 1 Bit: Marker
  • 15 Bit: Elementar Stream Clock Reference Bit 14-0
  • 1 Bit: Marker
  • 9 Bit: Elementar Stream Clock Reference Extension
  • 1 Bit: Marker

Ist das Flag für ES Rate gesetzt, kommen diese 3 Byte hinzu:

  • 1 Bit: Marker
  • 22 Bit: Elementar Stream Rate
  • 1 Bit: Marker

Ist das Flag für DSM Trick Mode gesetzt, kommt dieses Byte hinzu:

  • 3 Bit: Trick Mode Control
    000: Fast Forward
    • 2 Bit: Field ID
    • 1 Bit: Slice-Refresh
    • 2 Bit: Frequency Truncation
    001: Slow Motion
    • 5 Bit: Field Repeat Control
    010: Freeze Frame
    • 2 Bit: Field ID
    • 3 Bit: Reserviert
    011: Fast Reserve
    • 2 Bit: Field ID
    • 1 Bit: Slice-Refresh
    • 2 Bit: Frequency Truncation

Ist das Flag für zusätzliche Copyright Informationen gesetzt, kommt dieses Byte hinzu:

  • 1 Bit: Marker
  • 7 Bit: Zusätzliche Copyright Informationen

Ist das Flag für CRC gesetzt, kommen diese Byte hinzu:

  • 2 Byte: CRC Informationen zum vorausgegangenen Packet.

Ist das Flag für die Extensionen gesetzt, kommt ein Byte mit weiteren Flags hinzu:

  • 1 Bit: Private Data
  • 1 Bit: Pack Header
  • 1 Bit: Sequence Zähler
  • 1 Bit: P-STD Buffer
  • 3 Bit: Reserviert
  • 1 Bit: PES Extensionen

Ist das Flag für Private Data gesetzt:

  • 128 Byte: Pack Private Data

Ist das Flag für den Pack Header gesetzt, kommen diese Bytes hinzu:

  • 1 Byte: Größe des folgenden Datenblockes
  • MPEG-1 Pack Header oder MPEG-2 Program Stream Pack Header

Ist das Flag für den Sequence Zähler gesetzt, kommen diese beiden Bytes hinzu:

  • 1 Bit: Marker
  • 7 Bit: Program Paket Sequence Zähler - einschließlich dieses Pakets.
  • 1 Bit: Marker
  • 7 Bit: Original Stuffing Length - Stuffing Bytes in original MPEG-1 Packet Header

Ist das Flag für den P-STD Buffer gesetzt, kommen diese beiden Bytes hinzu:

  • 2 Bit: Gesetzt auf 01
  • 1 Bit: Scale
  • 13 Bit: P-STD Buffer Größe

Ist das Flag für die PES Extensionen gesetzt, kommen diese Bytes hinzu:

  • 1 Bit: Marker
  • 7 Bit: Größe des folgenden Datenfeldes
  • Datenfeld
  • x Bytes: Bis zu 32 Füllbytes.

Als Schema

 76543210
0PACKET_START_CODE_PREFIX
 
$000001
1
2
3Stream ID - Video $E0 - $EF, Audio $C0 - $DF
4Headerlänge
5
610Scrambled ControlPrioritätAusrichtgCopyrigthOriginal
7PTSDTSESCRES RateDSM Trick
Mode
Zusätzl.
Copyright
CRCExtension
Flags
8Länge der anschliessenden Headerdaten auf Grund der Flags inkl. Füllbytes.

Datenblöcke auf Grund der Flags:

PTS - Presentation Time Stamp
 76543210
00010 oder 1PTS Bit 32-30Marker
1Presentation Time Stamp Bit 29-15 ...
2... Presentation Time Stamp Bit 29-15Marker
3Presentation Time Stamp Bit 14-0 ...
4... Presentation Time Stamp Bit 14-0Marker
DTS - Decoding Time Stamp
 76543210
00001DTS Bit 32-30Marker
1Decoding Time Stamp Bit 29-15 ...
2... Decoding Time Stamp Bit 29-15Marker
3Decoding Time Stamp Bit 14-0 ...
4... Decoding Time Stamp Bit 14-0Marker
ESCR - Elementar Stream Clock Reference
 76543210
0ReserviertESCR Bit 32-30MarkerESCR ...
1... Elementar Stream Clock Reference Bit 29-15 ...
2... Elementar Stream Clock ReferenceMarkerESCR ...
3... Elementar Stream Clock Reference Bit 14-0 ...
4... Elementar Stream Clock ReferenceMarkerESCR Ext ...
5... Elementar Stream Clock Reference ExtensionMarker
ES Rate - Elementar Stream Rate
 76543210
0MarkerElementar Stream Rate ...
1... Elementar Stream Rate ...
2... Elementar Stream RateMarker
DSM Trick Mode
 76543210
0Trick Mode ControlField IDSlice
Refresh
Frequency
Truncation
Field Repeat Control
Field IDReserviert
Field IDSlice
Refresh
Frequency
Truncation
Zusätzliche Copyright Informationen
 76543210
0MarkerCopyrigth Informationen
CRC
 76543210
0CRC des vorhergegangenen Packets ...
1... CRC des vorhergegangenen Packets
Extensionen
 76543210
0Private
Data
Pack
Header
Sequence
Zähler
P-STD
Buffer
ReserviertPES
Ext.

Zu den letzten Flags gehören dann:

Private Data
 76543210
0..127PES Private Data
Pack Header
 76543210
0Länge des folgenden Datenpakets
1..xMPEG-1 Pack Header oder MPEG-2 Programm Pack Header
Sequence Zähler
 76543210
0MarkerProgramm Pack Sequence Zähler (einschließlich dieses Packs)
1MarkerLänge des Original MPEG-1 Headers
P-STD Buffer
 76543210
001ScaleP-STD Buffer Größe ...
1... P-STD Buffer Größe
PES Extension
 76543210
0MarkerLänge des folgenden Datenfeldes
1Reserviert

Erläuterungen

Bei der Stream ID ist das erste Bit immer gesetzt. Für Video ergibt sich 1110 xxxx und für Audio 1100 xxxx.

Das ersten Bits nach der Länge der Datenstruktur sind immer auf 10 gesetzt. Crambling 00 ist "payload is scrambled", andere Werte sind Nutzerdefiniert. Ist das Ausrichtungsflag gesetzt, folgt dem Header eine Beschreibung dazu. Copyright und Original treffen zu, wenn die Flags gesetzt sind.

Die Headerlänge ist die Länge der Daten ab dem folgenden Byte bis zum Paketende.

PTS, DTS und ESCR sind in 90 kHz Zyklen, die ESCR Erweiterung in 27 MHz Zyklen und die ES Rate in 50 Byte je Sekunde angegeben.

Die Trick Mode Controls sind:

  • 000: Fast Forward
  • 001: Slow Motion
  • 010: Freeze Frame
  • 011: Fast Reverse

Die Field IDs sind:

  • 00: Nur Field 1
  • 01: Nur Field 2
  • 10: Full Frame
  • 11: Reserviert

Die Frequency Truncation sind:

  • 00: nur DC Koeffizienten
  • 01: Ersten drei Koeffizienten in Scan Order
  • 10: Ersten sechs Koeffizienten
  • 11: Alle Koeffinzienten

Beim P-STD Buffer gibt das Scale Flag wieder an, in welcher Einheit der Wert angegeben ist. 0 ist für Audio mit 128 Byte und 1 für Video mit 1024 Byte.

Den Daten können bis zu 32 Füllbytes folgen.

Testprogramm

Das Testprogramm beinhaltet alles, was oben zu sehen ist. Bei einigen Daten wie Private Data, Pack Header, werden die Datenstrukturen nur übersprungen. Ob ich dies noch ändern werde, muss ich noch sehen. Denn für meine Zwecke ist dies nicht notwendig.

Mit dem folgenden kleinen Testprogramm kann man einen MPEG-2 Stream scannen, die Packs und Streams sowie den Pack Header anzeigen lassen.

MPEG2 Program Test 4 (178 kb) - MD5
Stand: 27. Mai 2009