Avatar
www.fr-an.de

MPEG-2 Multiplexed Stream

Private Stream Header

Es gibt zwei verschiedene Private Streams. Der Private Stream 1 enthält Nicht MPEG Audio sowie Untertitel und der Private Stream 2 Navigationsdaten. Hier soll nur auf den Private Stream 1 eingegangen werden. Der Aufbau entspricht bis auf zwei Unterschiede dem Video und Audio Header.

Aufbau

  1. 3 Byte: PACKET_START_CODE_PREFIX = $000001
  2. 1 Byte: Stream ID - Private Stream 1 $BD, Private Stream 2 $BF
  3. 2 Byte: Paketlänge - ohne die Bytes bis hier
     

Nun folgt die Extension (Erweiterung), welche nur beim Private Stream 1 vorhanden ist.

  1. 2 Bit: immer auf 10 gesetzt.
  2. 2 Bit: Scrambling Control - 00 Payload ist verschlüsselt.
  3. 1 Bit: Priorität. 1 ist höher als 0.
  4. 1 Bit: Alignment Indikator.
  5. 1 Bit: Copyright.
  6. 1 Bit: Original.
  7. 1 Bit: Flag für PTS (Presentation Time Stamp).
  8. 1 Bit: Flag für DTS (Decoding Time Stamp) - nur wenn PTS gesetzt ist.
  9. 1 Bit: ESCR (Elementar Stream Clock Reference)
  10. 1 bit: ES Rate
  11. 1 Bit: DSM Trick mode
  12. 1 Bit: Weitere Copyright Informationen
  13. 1 Bit: CRC
  14. 1 Bit: Extension Flags
  15. 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:

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

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

  1. 4 Bit: Gesetzt auf 0001
  2. 3 Bit: Decoding Time Stamp Bit 32-30
  3. 1 Bit: Marker
  4. 15 Bit: Decoding Time Stamp Bit 29-15
  5. 1 Bit: Marker
  6. 15 Bit: Decoding Time Stamp Bit 14-0
  7. 1 Bit: Marker

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

  1. 2 Bit: Reserviert - 00
  2. 3 Bit: Elementar Stream Clock Reference Bit 32-30
  3. 1 Bit: Marker
  4. 15 Bit: Elementar Stream Clock Reference Bit 29-15
  5. 1 Bit: Marker
  6. 15 Bit: Elementar Stream Clock Reference Bit 14-0
  7. 1 Bit: Marker
  8. 9 Bit: Elementar Stream Clock Reference Extension
  9. 1 Bit: Marker

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

  1. 1 Bit: Marker
  2. 22 Bit: Elementar Stream Rate
  3. 1 Bit: Marker

Ist das Flag für DSM Trick Mode (nicht bei DVD) gesetzt, kommt dieses Byte hinzu:

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

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

  1. 1 Bit: Marker
  2. 7 Bit: Zusätzliche Copyright Informationen

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

  1. 2 Byte: CRC Informationen zum vorausgegangenen Packet.

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

  1. 1 Bit: Private Data
  2. 1 Bit: Pack Header
  3. 1 Bit: Sequence Zähler
  4. 1 Bit: P-STD Buffer
  5. 3 Bit: Reserviert 111
  6. 1 Bit: PES Extensionen 2

Ist das Flag für Private Data gesetzt:

  1. 16 Byte: Pack Private Data

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

  1. 1 Byte: Größe des folgenden Datenblockes
  2. x Byte: Pack Header

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

  1. 1 Bit: Marker
  2. 7 Bit: Program Paket Sequence Zähler - einschließlich dieses Pakets.
  3. 1 Bit: Marker
  4. 1 Bit: MPEG1_MPEG2 Identifikator
  5. 6 Bit: Original Stuffing Length

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

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

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

  1. 1 Bit: Marker
  2. 7 Bit: Größe des folgenden Datenfeldes
  3. 8 Bit: Reserviert
  4. Datenfeld
  1. x Bytes: Füllbytes bis oben genannte Länge erreicht ist.

 

Als Schema:

  7 6 5 4 3 2 1 0
0 PACKET_START_CODE_PREFIX
 
$000001
1
2
3 Stream ID - Private Stream 1 $BF
4 Headerlänge
5

 

Die Extension:

6 1 0 Scrambled Control Priorität Ausrichtg Copyrigth Original
7 PTS DTS ESCR ES Rate DSM Trick
Mode
Zusätzl.
Copyright
CRC Extension
Flags
8 Länge der anschliessenden Headerdaten auf Grund der Flags inkl. Füllbytes.

 

Datenblöcke auf Grund der Flags:

PTS - Presentation Time Stamp
  7 6 5 4 3 2 1 0
1 0 0 1 0 oder 1 PTS Bit 32-30 Marker
1 Presentation Time Stamp Bit 29-15 ...
2 ... Presentation Time Stamp Bit 29-15 Marker
3 Presentation Time Stamp Bit 14-0 ...
4 ... Presentation Time Stamp Bit 14-0 Marker

 

DTS - Decoding Time Stamp
  7 6 5 4 3 2 1 0
0 0 0 0 1 DTS Bit 32-30 Marker
1 Decoding Time Stamp Bit 29-15 ...
2 ... Decoding Time Stamp Bit 29-15 Marker
3 Decoding Time Stamp Bit 14-0 ...
4 ... Decoding Time Stamp Bit 14-0 Marker

 

ESCR - Elementar Stream Clock Reference
  7 6 5 4 3 2 1 0
0 Reserviert ESCR Bit 32-30 Marker ESCR ...
1 ... Elementar Stream Clock Reference Bit 29-15 ...
2 ... Elementar Stream Clock Reference Marker ESCR ...
3 ... Elementar Stream Clock Reference Bit 14-0 ...
4 ... Elementar Stream Clock Reference Marker ESCR Ext ...
5 ... Elementar Stream Clock Reference Extension Marker

 

ES Rate - Elementar Stream Rate
  7 6 5 4 3 2 1 0
0 Marker Elementar Stream Rate ...
1 ... Elementar Stream Rate ...
2 ... Elementar Stream Rate Marker

 

DSM Trick Mode
  7 6 5 4 3 2 1 0
0 Trick Mode Control Field ID Slice
Refresh
Frequency
Truncation
Field Repeat Control
Field ID Reserviert
Field ID Slice
Refresh
Frequency
Truncation

 

Zusätzliche Copyright Informationen
  7 6 5 4 3 2 1 0
0 Marker Copyrigth Informationen

 

CRC
  7 6 5 4 3 2 1 0
0 CRC des vorhergegangenen Packets ...
1 ... CRC des vorhergegangenen Packets

 

Extensionen
  7 6 5 4 3 2 1 0
0 Private
Data
Pack
Header
Sequence
Zähler
P-STD
Buffer
Reserviert PES
Ext.

 

Zu den letzten Flags gehören dann:

Private Data
  7 6 5 4 3 2 1 0
0..15 PES Private Data

 

Pack Header
  7 6 5 4 3 2 1 0
0 Länge des folgenden Datenpakets
1..x MPEG-1 Pack Header oder MPEG-2 Programm Pack Header

 

Sequence Zähler
  7 6 5 4 3 2 1 0
0 Marker Programm Pack Sequence Zähler (einschließlich dieses Packs)
1 Marker MPEG1_MPEG2 Identifikator Original Stuffing Length

 

P-STD Buffer
  7 6 5 4 3 2 1 0
0 0 1 Scale P-STD Buffer Größe ...
1 ... P-STD Buffer Größe

 

PES Extension
  7 6 5 4 3 2 1 0
0 Marker Länge des folgenden Datenfeldes
1 Reserviert

 

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:

  1. 000: Fast Forward
  2. 001: Slow Motion
  3. 010: Freeze Frame
  4. 011: Fast Reverse

Die Field IDs sind:

  1. 00: Nur Field 1
  2. 01: Nur Field 2
  3. 10: Full Frame
  4. 11: Reserviert

Die Frequency Truncation sind:

  1. 00: nur DC Koeffizienten
  2. 01: Ersten drei Koeffizienten in Scan Order
  3. 10: Ersten sechs Koeffizienten
  4. 11: Alle Koeffinzienten

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

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

 

Testprogramm

Hier kann das Testprogramm verwendet werden, welches bereits im Kapitel "Video/Audio Packet Header" zum Einsatz kam.

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

Fr_An - Letzte Änderung: 30. Mai 2009
Counter
seit 28. Juli 2010