Projekte > MPEG-1/2 Video > Transport Stream

PAT - Program Association Table

Die Program Association Table ist in der ISO/IEC 13818-1 definiert. Für sie ist die PID $0000 reserviert.

Der Aufbau

Der Beginn einer Tabelle ist dadurch gekennzeichnet, dass der payload_unit_start_indicator im Transport Stream Header auf '1' gesetzt ist. In der Tabelle ist angegeben, auf wieviele Sektionen die Tabelle verteilt ist. In den Folgesektionen wird die Tabelle einfach fortgesetzt.

  • program_specific_information
  • 8 Bit: pointer_field (Nur wenn in diesem Paket eine Section beginnt.)
  • Soviele Bytes, wie im pointer_field angegeben sind.
  • program_association_section
    • 8 Bit: table_id
    • 1 Bit: section_syntax_indicator
    • 1 Bit: '0'
    • 2 Bit: reserved
    • 12 Bit: section_length
    • 16 Bit: transport_stream_id
    • 2 Bit: reserved
    • 5 Bit: version_number
    • 1 Bit: current_next_indicator
    • 8 Bit: section_number
    • 8 Bit: last_section_number
    • section_length - 9 Byte:
      • 16 Bit: program_number
      • 3 Bit: reserved ('111')
      • 13 Bit: Wenn die program_number = '0' ist
        dann network_PID
        sonst program_map_PID
    • 32 Bit: CRC_32

Program Specific Information

pointer_field: Das pointer_field ist nur vorhanden, wenn in diesem Paket eine Sektion beginnt. Ist dies der Fall, ist der Payload Start Indicator des Transport Stream Headers auf '1' gesetzt. Das pointer_field gibt dann an, ab welchem Byte nach dem pointer_field die neue Sektion beginnt. Beginnt keine neue Sektion ist der Payload Start Indicator auf '0' gesetzt.

Program Association Section

table_id: Ist die ID der Tabelle. Sie muss den Wert $00 besitzen.

section_syntax_indicator: Das Bit ist auf '1' gesetzt.

section_length: Dies ist Länge der Sektion. Sie gibt die verbleibende Länge ab dem folgenden Byte einschließlich der Kontrollsumme CRC32 an. Die Sektion kann über mehrerere Pakete verteilt sein, darf jedoch nicht länger als 1021 Byte sein. Die ersten beiden der zwölf Bit sind immer auf '0' gesetzt.

transport_stream_id: Diese ID dient der Unterscheidung der Streams. Sie wird vom Anwender festgelegt.

version_number: Das ist die Versionsnummer der Tabelle. Sie beginnt mit 0 und wird bei einer Änderung der Information um 1 erhöht. Ist die 31 erreicht, beginnt die Zählung wieder bei 0. Hat der current_next_indicator den Wert '1', dann ist dies die Version der gerade anzuwendenen program association table. Ist der Wert '0', ist es die Version der nächsten anzuwendenen program association table.

current_next_indicator: Er gibt an, ob die Tabelle anwendbar ist. Ist der Wert 0, ist es die nächste anzuwendene Tabelle.

section_number: Die Sektionen sind nummeriert. Die Nummer wird mit jeder weiteren Sektion mit der gleichen table_id, service_id, transport_stream_id und original_network_id um 1 erhöht.

last_section_number: Die Nummer der letzten Sektion.

Program Number

Dies ist die Liste der den Programmen zugeordneten PIDs. Hat die Programmnummer den Wert $00 handelt es sich um die PID des Netzwerkes. Die Anzahl der Einträge ergbit sich aus der Länge der Sektion abzüglich der Länge der Daten vor und hinter der Liste (section_length - 9 Byte) dividiert durch die Länge eines Eintrages (4 Byte).

network_PID: Gibt an, welche PID aus der Network Information Table in den Transport Stream Paketen für die program_number verwendet wird.

program_map_PID: Gibt an, welche PID aus der program map section in den Transport Stream Paketen für die program_number verwendet wird.

Hinweis

Erstreckt sich eine Sektion über mehrere Pakete, müssen erst alle Pakete gelesen werden, bevor der Inhalt der Sektion ausgewertet werden kann. Im Testprogramm wird dies im Moment noch nicht getan.

Testprogramm

Test 4: Das Testprogramm scannt einen Transport Stream. Es zeigt die Stream Header, Adaptationsfelder und Program Association Table.

TSTest4 (232 kb), MD5 (1 kb).
Stand: 14. Februar 2010