Heim > Web-Frontend > PS-Tutorial > Hauptteil

Zusammenfassung des Formats und der Analyse des PS-Streams

高洛峰
Freigeben: 2017-02-15 09:43:15
Original
4380 Leute haben es durchsucht

Für PS-Streams habe ich kürzlich aus beruflichen Gründen das PS-Stream-Format und den Entpackvorgang in MPEG2 untersucht.

Zuerst müssen wir wissen, was das PS-Paket-Stream-Format ist:

Führen Sie die folgende PS-Verpackung für H264 durch: Jede IDR-NALU enthält normalerweise NALUs wie SPS und PPS, also Encapsulate Fügen Sie die NALU von SPS, PPS und IDR in ein PS-Paket ein, einschließlich des PS-Headers, und fügen Sie dann den PS-Systemheader, die PS-Systemzuordnung und den PES-Header + h264-Rohdaten hinzu. Daher ist die Reihenfolge von außen nach innen eines IDR NALU PS-Pakets: PS-System-Header |. Für andere Nicht-Keyframe-PS-Pakete ist es viel einfacher, einfach den PS-Header und den PES-Header direkt hinzuzufügen. Die Reihenfolge lautet: PS-Header |. PES-Header |. Das Obige gilt für den Fall, dass nur Video vorhanden ist. Wenn Sie den Ton in ein PS-Paket packen möchten, können Sie dies auch tun. Wenn Audiodaten vorhanden sind, fügen Sie einfach den PES-Header zu den Daten hinzu und fügen Sie ihn nach dem Video-PES ein. Die Reihenfolge ist wie folgt: PS-Paket = PS-Header |. PES (Audio) und dann RTP zum Einkapseln und Senden verwenden.

Das Obige ist ein allgemeines Kapselungsformat für den Datenfluss. Schauen wir uns jeden Teil jeder Kapselung an:

PS流的格式和解析总结

Das erste ist der PSheader-Teil: (aus dem chinesischen MPEG2-Standarddokument)

Syntax

Bitnummer

Mnemonic

pack_header() {

pack_start_code

32

bslbf

 ' 01'

2

bslbf

system_clock_reference_base[32..30]

3

bslbf

marker_bit

1

bslbf

system_clock_reference_base[29..15]

15

bslbf

marker_bit

1

bslbf

system_clock_reference_base[14..0]

15

bslbf

marker_bit

1

bslbf

system_clock_reference_extension

9

uimsbf

marker_bit

1

bslbf

program_mux_rate

22

uimsbf

marker_bit

1

bslbf

    marker_bit

1

bslbf

    reserviert

5

bslbf

    pack_stuffing_length

3

uimsbf

    für (i=0;i

 

 

        stuffing_byte

8

bslbf

    }

 

 

    if (nextbits()==system_header_start_code) {

 

 

        system_header()

 

 

    }

 

 

}

 

 

Die semantische Definition jedes Felds im Programm-Stream-Paket (PS-Header):

Pack-Startcode-Feld pack_start_code

Der Wert ist' 0000 0000 0000 0000 0000 0001 1011 1010' (0x000001BA) Bitfolge, die verwendet wird, um den Anfang eines Pakets zu markieren.

Systemuhr-Referenzfeld system_clock_reference_base, system_clock_reference_extenstion

Die Systemuhrreferenz (SCR) ist ein 42-Bit-Feld, das in zwei Teile codiert ist. Der erste Teil system_clock_reference_base ist ein Feld mit einer Länge von 33 Bit, und sein Wert SCR_base(i) ist durch Gleichung 2-19 gegeben; der zweite Teil system_clock_reference_extenstion ist ein Feld mit einer Länge von 9 Bit und sein Wert SCR_ext( i) wird durch Gleichung 2-20 gegeben. Das SCR-Feld gibt die erwartete Zeit an, in der das Byte im Elementarstrom, der das letzte Bit von ESCR_base enthält, am Eingang des Zieldecoders des Programms ankommt.

Siehe 2.7.1 für die Codierungsfrequenzanforderungen des SCR-Bereichs.

Markerbitfeld marker_bit

1-Bit-Feld, Wert „1“.

Programm-Composite-Rate-Feld program_mux_rate

Eine 22-Bit-Ganzzahl, die die Rate angibt, mit der der P-STD den Programmstream während des Pakets empfängt, das dieses Feld enthält. Sein Wert liegt in Einheiten von 50 Bytes/Sekunde. Ein Wert von 0 ist nicht zulässig. Der durch dieses Feld dargestellte Wert wird verwendet, um die Byte-Ankunftszeit am P-STD-Eingang in 2.5.2 zu definieren. Der Wert dieses Felds kann in verschiedenen Paketen des Programm-Multiplex-Composite-Streams in diesem Standard unterschiedlich sein.

Pack-Stuffing-Längenfeld pack_stuffing_length

3-stellige Ganzzahl, gibt die Anzahl der Stopfbytes nach diesem Feld an.

Stopfbyte-Feld stuffing_byte

8-Bit-Feld, der Wert ist immer „1111 1111“. Dieses Feld kann vom Encoder eingefügt werden, um beispielsweise Kanalanforderungen zu erfüllen. Es wird vom Decoder verworfen. In jedem Paket-Header sind nur maximal 7 Füllbytes zulässig.

Die definierte Bytereihenfolge ist wie folgt :

4B-Paket-Startcode:

byte 0

byte 1

byte 2

byte 3

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

0000 0000 0000 0000 0000 0001
start code

1011 1010
PACK identifier

Byte 0

Byte 1

Byte 2

Byte 3

7 td>

6

5

4

3

2 td>

1

0

7

6

5 td>

4

3

2

1

0 td>

7

6

5

4

3 td>

2

1

0

7

6 td>

5

4

3

2

1 td>

0

0000 0000 0000 0000 0000 0001
Startcode

1011 1010
PACK-Kennung

 

PACK-ID – 0xBA

 

系统时钟基准(SCR-System Clock Reference)的基本部分SCR的扩展部分

Tabelle>

 

PS复用速率:

 

byte 4

byte 5

byte 6

byte 7

byte 8

byte 9

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

7

6

5

4

3

2

1

0

01

SCR 32..30

1

SCR 29..15

1

SCR 14..00

1

SCR_ext

1

Byte 4

Byte 5

Byte 6

byte 7

Byte 8

Byte 9

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

7

6

5

4

3

2

1

0

01

SCR 32..30

1

SCR 29..15

1

SCR 14..00

1

SCR_ext

1

7

2

5

0

3

6

1

byte 10

byte 11

byte 12

byte 13

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

Program_Mux_Rate

1

1

reserved

pack_stuffing_length

 

Byte 10

Byte 11

Byte 12

Byte 13

6

5

4

3

1

0

7

6

4

3

2

1

7

6

5

4

2

1

0

7

5

4

3

2

0

Program_Mux_Rate

1

1

reserviert

pack_stuffing_length 

============================================= === ==============

Werfen Sie als Nächstes einen Blick auf die Definition des PS-System-Headers (d. h. PS-System-Header: Programm-Stream-Systemtitel). ) Teil : (Aus MPEG-2-Standarddokument)

Tabelle 2-34 Programm-Stream-Systemtitel

Sprache

Ziffern

Mnemonik

system_header() {

system_header_start_code

32

bslbf

header_length

16

uimsbf

marker_bit

1

bslbf

rate_bound

22

uimsbf

marker_bit

1

bslbf

audio_bound

6

uimsbf

feste_Flagge

1

bslbf

CSPS_flag

1

bslbf

system_audio_lock_flag

1

bslbf

system_video_lock_flag

1

bslbf

marker_bit

1

bslbf

vedio_bound

5

uimsbf

packet_rate_restriction_flag

1

bslbf

reserved_bits

7

bslbf

while (nextbits()=='1') {

          stream_id

8

uimsbf

 '11'

2

bslbf

        P-STD_buffer_bound_scale

1

bslbf

        P-STD_buffer_size_bound

13

uimsbf

    }

 

 

}

 

 

 

Semantische Definition jedes Felds im System-Header:

System-Header-Startcodefeld system_header_start_code

Wert '0000 0000 0000 0000 A Bitfolge von 0000 0001 1011 1011' (0x000001BB), die den Anfang des Systemheaders angibt.

Header-Längenfeld header_length

16-Bit-Feld. Gibt die Länge des Systemheaders nach diesem Feld in Bytes an. Dieses Feld kann in zukünftigen Erweiterungen dieser Spezifikation erweitert werden.

Ratenbegrenzungsfeld rate_bound

22-Bit-Feld, der Wert ist nicht kleiner als der Maximalwert des in jedem Paket des Programmstreams codierten Felds program_mux_rate. Dieses Feld kann vom Decoder verwendet werden, um abzuschätzen, ob er in der Lage ist, den gesamten Stream zu dekodieren.

Audio-gebundenes Feld audio_bound

6-Bit-Feld, der Wert ist eine Ganzzahl im geschlossenen Bereich von 0 bis 32 und nicht kleiner als der Dekodierungsprozess in den Programmstream gleichzeitig Die maximale Anzahl aktiver GB/T XXXX.3- und GB/T AAAA.3-Audiostreams. Wenn in diesem Abschnitt der STD-Puffer nicht leer ist oder die Präsentationseinheit im P-STD-Modell präsentiert wird, ist der Dekodierungsprozess der Audiostreams GB/T XXXX.3 und GB/T AAAA.3 aktiv.

Festes Flag-Feld „fixed_flag“

1-Bit-Flag. Bei der Einstellung „1“ wird ein Betrieb mit konstanter Bitrate angezeigt; bei der Einstellung „0“ wird ein Betrieb mit variabler Bitrate angezeigt. Während des Betriebs mit konstanter Bitrate muss der system_clock_reference-Feldwert im zusammengesetzten GB/T XXXX.1-Stream der folgenden linearen Formel folgen:

SCR_base(i )=( (c1×ic2) p 300) % 233                (2-22)

SCR_ext(i)=((c1×ic2) p 300) % 300      ( 2-23 )

Unter ihnen:

c1 ist eine reelle Konstante, die für alle i gilt;

c2 ist eine reelle Konstante, die für alle i gültig ist

i Der Byteindex des letzten Bits eines beliebigen system_clock_reference-Felds, das im zusammengesetzten GB/T XXXX.1-Stream enthalten ist.

CSPS Flag-Feld CSPS_flag

1-Bit-Feld. Bei der Einstellung „1“ entspricht der Programmstream den in 2.7.9 definierten Einschränkungen.

System-Audio-Sperrflag-Feld system_audio_lock_flag

1-Bit-Feld. Zeigt an, dass ein bestimmtes Verhältnis zwischen der Audio-Abtastrate des Systemzieldecoders und der Systemtaktfrequenz besteht. system_clock_frequenz ist in 2.5.2.1 definiert und die Audio-Abtastrate wird durch GB/T XXXX.3 angegeben. Wenn das Verhältnis SCASR zwischen system_clock_frequenz und der tatsächlichen Audio-Abtastrate für alle Präsentationseinheiten aller Audio-Elementarströme im Programmstrom konstant ist und die im Audiostrom angegebene Standard-Abtastrate gleich dem Wert in der folgenden Tabelle ist, dann ist dies der Fall Feld kann nur '1' sein.

SCASR=(system_clock_frequenz) / audio_sample_rate_in_the_P-STD (2-24)

Die Symbole X/Y repräsentieren Division reeller Zahlen.

Standard-Audio Abtastfrequenz (kHz)

标准音频采样频率(kHz)

16

32

22.05

44.1

24

48

SCASR

27 000 000

--------

16 000

27 000 000

-------

32 000

27 000 000

------

22 050

27 000 000

------

44 100

27 000 000

------

24 000

27 000 000

--------

48 000

16

32

22,05

44,1

24

48

SCASR

27 000 000

--------

16 000

27 000 000

-------

32 000

27 000 000

------

22 050

27 000 000

------

44 100

27 000 000

------

24 000

27 000 000

--------

48 000

System-Video-Sperr-Flag-Feld system_video_lock_flag

1-Bit-Feld. Zeigt an, dass ein bestimmtes Verhältnis zwischen der Videobildrate des Systemzieldecoders und der Systemtaktfrequenz besteht. system_clock_frequenz ist in 2.5.2.1 definiert und die Videobildrate wird durch GB/T XXXX.2 angegeben. Wenn das Verhältnis SCFR zwischen system_clock_frequenz und der tatsächlichen Videobildrate für alle Präsentationseinheiten aller Videoelementarströme in GB/T XXXX.1 konstant ist und die im Videostrom angegebene Standardbildrate dem Wert in der folgenden Tabelle entspricht , dann kann dieses Feld nur „1“ sein.

SCFRsystem_clock_frequenz / frame_rate_in_the_P-STD (2-25)

29,97

Standardbildrate (Hz)

标准帧速率(Hz)

23.976

24

25

29.97

30

50

59.94

60

SCFR

1 126 125

1 125 000

1 080 000

900 900

900 000

540 000

450 450

450 000

23.976

24

25

30

50

59,94

60

SCFR

1 126 125

1 125 000

1 080 000

900 900

900 000

540 000

450 450

450 000

Der Wert des Verhältnisses SCFR ist präzise. Bei Standardraten von 23,976, 29,97 oder 59,94 Bildern/Sekunde weicht die tatsächliche Bildrate geringfügig von der Standardrate ab.

Video-gebundenes Feld video_bound

5-Bit-Feld, der Wert ist eine Ganzzahl im geschlossenen Bereich von 0 bis 16 und nicht kleiner als der Decodierungsprozess im Programmstream während aktiv Die maximale Anzahl von GB/T XXXX.2- und GB/T AAAA.2-Streams. In diesem Abschnitt ist der Dekodierungsprozess von GB/T XXXX.2- und GB/T AAAA.2-Videostreams aktiv, wenn der P-STD-Puffer nicht leer ist oder die Präsentationseinheit im P-STD-Modell präsentiert wird.

Paketratenbeschränkungs-Flag-Feld packet_rate_restriction_flag

1-Bit-Flag. Wenn das CSPS-Flag „1“ ist, gibt dieses Feld an, welche der in 2.7.9 angegebenen Grenzwerte für die Paketrate gelten. Wenn das CSPS-Flag „0“ ist, ist die Bedeutung dieses Felds undefiniert.

Reserviertes Bitfeld „reserved_bits“

7-Bit-Feld. Reserviert für die zukünftige Verwendung durch ISO/IEC. Sein Wert muss „111 1111“ sein, sofern ISO/IEC nichts anderes angibt.

Stream-Identifikationsfeld stream_id

8-Bit-Feld. Gibt die Codierung und die elementare Stream-Nummer des Streams an, der in den nachfolgenden Feldern P-STD_buffer_bound_scale und P-STD_buffer_size_bound beteiligt ist.

Wenn der Wert „1011 1000“ ist, beziehen sich die nachfolgenden Felder P-STD_buffer_bound_scale und P-STD_buffer_size_bound auf alle Audiostreams im Programmstream.

Wenn der Wert „1011 1001“ ist, beziehen sich die nachfolgenden Felder P-STD_buffer_bound_scale und P-STD_buffer_size_bound auf alle Videostreams im Programmstream.

Wenn stream_id andere Werte annimmt, sollte es ein Ein-Byte-Wert größer oder gleich „1011 1100“ sein und als Codierung und grundlegende Stream-Nummer des Streams gemäß Tabelle 2-18 interpretiert werden.

Für jeden Elementarstrom in einem Programmstrom müssen P-STD_buffer_bound_scale und P-STD_buffer_size_bound über diesen Mechanismus genau einmal in jedem Systemheader angegeben werden.

P-STDPuffergebundenes Skalierungsfeld P-STD_buffer_bound_scale

1-Bit-Feld. Gibt den Skalierungsfaktor an, der zur Interpretation des nachfolgenden P-STD_buffer_size_bound-Felds verwendet wird. Wenn die vorherige stream_id einen Audiostream darstellt, ist der Wert dieses Felds „0“. Wenn es sich um einen Videostream handelt, ist der Wert dieses Felds „1“. Für alle anderen Stream-Typen kann dieser Feldwert „0“ oder „1“ sein.

P-STDPuffergrößenbegrenzungsfeld P-STD_buffer_size_bound

13-Bit-Ganzzahl ohne Vorzeichen, der Wert ist nicht kleiner als Stream n im Programmstrom Der Maximalwert der P-STD-Puffergröße BSn für alle Pakete. Wenn der Wert von P-STD_buffer_bound_scale „0“ ist, misst dieses Feld die Grenzen der Puffergröße in Einheiten von 128 Byte. Wenn der Wert von P-STD_buffer_bound_scale „1“ ist, misst dieses Feld die Grenzen der Puffergröße in Einheiten von 1024 Byte. Deshalb:

if (P-STD_buffer_bound_scale == 0)

BSnP-STD_buffer_size_bound×128

else

BSnP-STD_buffer_size_bound×1024

Für die Analyse des Systemheaders müssen wir im Allgemeinen nur feststellen, ob ein Systemheader vorhanden ist (gemäß dem Startcode des Systemheaders 0x000001BB), und dann lesen wir die Headerlänge des Systemheaders. Das heißt, der Teil PS SYSTEM HEADER LENGTH. Überspringen Sie dann basierend auf der Länge des Headers den PS-System-Header. Gehen Sie zum nächsten Teil, dem PS-Programm-Stream-Mapping-Header.

======================================== ===== =================

Schauen Sie sich dann die Definition des Programm-Mapping-Stream-Teils (Program Stream Mapping) des PS-Stream : (aus MPEG-2-Standarddokument)

Tabelle 2-35 Programm-Stream-Zuordnung

Sprachmethode

Bitnummer

Mnemonik

program_stream_map() {

packet_start_code_prefix

24

bslbf

map_stream_id

8

uimsbf

program_stream_map_length

16

uimsbf

current_next_indicator

1

bslbf

    reserviert

2

bslbf

program_stream_map_version

5

uimsbf

    reserviert

7

bslbf

    marker_bit

1

bslbf

    program_stream_info_length

16

uimsbf

    für (i=0;i

 

 

        descriptor()

 

 

    }

 

 

    elementary_stream_map_length

16

uimsbf

    für (i=0;i

 

 

       stream_type

8

uimsbf

       elementary_stream_id

8

uimsbf

       elementary_stream_info_length

16

uimsbf

       für (i=0;i

 

 

           descriptor()

 

 

       }

 

 

    }

 

 

    CRC_32

32

rpchof

}

 

 

Die semantische Definition jedes Felds in der Programmstromzuordnung:

Paketstartcode-Präfixfeld packet_start_code_prefix

24-Bit-Code. Es und die folgende map_stream_id bilden zusammen einen Gruppenstartcode, um den Start der Gruppe zu markieren. Dieses Feld ist eine Bitfolge mit dem Wert „0000 0000 0000 0000 0000 0001“ (0x000001).

Map-Stream-Identifikationsfeld map_stream_id

8-Bit-Feld, der Wert ist 0xBC.

Programm-Stream-Map-Längenfeld program_stream_map_length

16-Bit-Feld. Gibt die Anzahl der Bytes in program_stream_map an, die diesem Feld unmittelbar folgen. Der maximale Wert dieses Feldes beträgt 1018 (0x3FA).

Aktuelles nächstes Indikatorfeld current_next_indicator

1-Bit-Feld. Wenn es auf „1“ gesetzt ist, zeigt es an, dass die übertragene Programmstromzuordnung derzeit verfügbar ist. Bei der Einstellung „0“ bedeutet dies, dass die übertragene Programmstromzuordnung noch nicht verfügbar ist, es sich jedoch um die nächste wirksame Tabelle handelt.

Programm-Stream-Map-Versionsfeld program_stream_map_version

5-Bit-Feld, das die Versionsnummer der gesamten Programm-Stream-Map angibt. Immer wenn sich die Definition der Programm-Stream-Map ändert, wird dieses Feld um 1, Modulo 32, erhöht. Wenn current_next_indicator „1“ ist, sollte dieses Feld die Versionsnummer der aktuell anwendbaren Programm-Stream-Zuordnung sein; wenn current_next_indicator „0“ ist, sollte dieses Feld die Versionsnummer der nächsten anwendbaren Programm-Stream-Zuordnung sein.

Programmstrom-Informationslängenfeld program_stream_info_length

16-Bit-Feld, das die Gesamtlänge des Deskriptors angibt, der unmittelbar auf dieses Feld folgt.

Markerbitfeld marker_bit

1-Bit-Feld, der Wert ist „1“.

Elementare Stream-Map-Längenfeld elementary_stream_map_length

16-Bit-Feld, das die Bytelänge aller Elementar-Stream-Informationen in der Programm-Stream-Map angibt. Es enthält nur die Felder stream_type, elementary_stream_id und elementary_stream_info_length. (Beachten Sie hier, dass die Länge der grundlegenden Stream-Zuordnung hier nur die Summe der später angegebenen Definitionsfelder umfasst. Das heißt, aus dieser Länge können wir später erkennen, wie viele Arten von Stream-Definitionen es gibt. , weil die Summe Die Anzahl der Definitionsfelder eines Streams: stream_type (1BYTE), elementary_stream_id (1byte) und elementary_stream_info_length (2byte) beträgt 4 Bytes, Sie können also elementary_stream_map_length/4 verwenden, um mehrere später definierte Streamtypinformationen abzurufen)

Stream-Typ-Feld stream_type

8-Bit-Feld, das den Stream-Typ gemäß Tabelle 2-29 angibt. Dieses Feld kann nur den im PES-Paket enthaltenen Elementarstrom markieren und der Wert darf nicht 0x05 sein.

(Hier können wir vorübergehend anhand der Definition im nationalen Standard GB28181 wissen

1. MPEG-4-Videostream: 0x10;

2. H.264-Videostream : 0x1B;

3. G.711-Audiostream: 0x92; 🎜>

6. G.723.1-Audiostream: 0x93; 🎜 >Da das Programmzuordnungs-Stream-Feld nur vorhanden ist, wenn Schlüsselbilder gepackt werden, können Sie, wenn Sie den Stream-Codierungstyp der PS-Verpackung bestimmen möchten, anhand dieses Felds beurteilen

)

Grundsätzlich: Stream-Identifikationsfeld elementary_stream_id

8-Bit-Feld, das den Wert des stream_id-Felds im PES-Gruppenheader der PES-Gruppe angibt, in der sich der Elementarstream befindet.

(Definition dieses Feldes, 0x(C0~DF) bezieht sich auf Audio, 0x(E0~EF) bezieht sich auf Video)

Grundlegende Stream-Informationen Längenfeld elmentary_stream_info_length

16-Bit-Feld, das die Bytelänge des Deskriptors angibt, der unmittelbar auf dieses Feld folgt. ( ist die Streambeschreibungslänge dieses Typs. Die angegebene Länge nach diesem Feld liegt nicht in der durch elementary_stream_map_length angegebenen Bereichsklasse.)

CRC 32

Feld CRC_32

Ein 32-Bit-Feld, das den CRC-Wert enthält, um nach der Verarbeitung der gesamten Programmstromzuordnung einen Ausgabewert von 0 in den in Anhang A definierten Decoderregistern zu erzeugen.

Für die Analyse dieses Feldes benötigen wir eine Bitfolge mit dem Wert 0x000001BC, die den Beginn der Programmstromzuordnung angibt. Es ist vorerst keine Verarbeitung erforderlich . Lesen Sie die Header-Länge und überspringen Sie sie direkt. Wenn Sie den Stream-Codierungstyp analysieren müssen, müssen Sie dieses Feld im Detail analysieren.

==================PES-Paket=============== === ============ Als nächstes analysieren wir den Inhalt des

PES-Pakets: PES package=PES header+code raw data;

Werfen wir einen Blick auf den PES-Header

: (von http://www.php.cn/)

PS流的格式和解析总结

Dann werfen wir einen Blick auf die Analyseschritte: (aus MPEG-2-Standarddokument)

Tabelle 2-17 PES-Gruppierung

Sprache

Ziffern

Mnemonik

PES_packet(){

packet_start_code_prefix

24

bslbf

stream_id

8

uimsbf

PES_packet_length

16

uimsbf

if(stream_id != program_stream_map

&& stream_id !=padding_stream

&& stream_id !=private_stream_2

&& stream_id !=ECM

&& stream_id =EMM

&& stream_id !=program_stream_directory

&& stream_id !=DSMCC_stream

&& stream_id !=ITU-T Rec.H.222.1 Typ E Stream){

'10'

2

bslbf

PES_scrambling_control

2

bslbf

PES_priority

1

bslbf

data_alignment_indicator

1

bslbf

Urheberrecht

1

bslbf

Original_oder_Kopie

1

bslbf

PTS_DTS_flags

 2

bslbf

ESCR_flag

 1

bslbf

ES_rate_flag

 1

bslbf

DSM_trick_mode_flag

 1

bslbf

additional_copy_info_flag

 1

bslbf

PES_CRC_flag

 1

bslbf

PES_extension_flag

 1

bslbf

PES_header_data_length

 8

uimsbf

if(PTS_DTS_flags ==' 10'){

 

 

'0010'

 4

bslbf

PTS[32..30]

 3

bslbf

marker_bit

 1

bslbf

PTS[29..15]

15

bslbf

marker_bit

 1

bslbf

PTS[14..0]

15

bslbf

marker_bit

 1

bslbf

}

 

 

if(PTS_DTS_flags =='11'){

 

 

'0011'

4

bslbf

PTS[32..30 ]

 3

bslbf

marker_bit

 1

bslbf

PTS[29..15]

15

bslbf

marker_bit

 1

bslbf

PTS[14..0]

15

bslbf

marker_bit

 1

bslbf

'0001'

 4

bslbf

PTS[32..30]

 3

bslbf

marker_bit

 1

bslbf

PTS[29..15]

15

bslbf

marker_bit

 1

bslbf

PTS[14..0]

15

bslbf

marker_bit

 1

bslbf

}

 

 

if(ESCR_flag =='1'){

 

 

reserviert

 2

bslbf

ESCR_base[32..30]

 3

bslbf

marker_bit

 1

bslbf

ESCR_base[29..15]

15

bslbf

marker_bit

 1

bslbf

ESCR_base[14..0]

15

bslbf

marker_bit

 1

bslbf

ESCR_extension

 9

uimsbf

marker_bit

 1

bslbf

}

 

 

if(ES_rate_flag =='1'){

 

 

marker_bit

 1

bslbf

ES_rate

22

uimsbf

marker_bit

 1

bslbf

}

 

 

if (DSM_trick_mode_flag =='1'){

 

 

trick_mode_control

 3

uimsbf

if ( trick_mode_control = =fast_forward ) {

 

 

field_id

 2

bslbf

intra_slice_refresh

 1

bslbf

frequenz_truncation

 2

bslbf

}

 

 

else if ( trick_mode_control = = slow_motion ) {

 

 

rep_cntrl

 5

uimsbf

}

 

 

else if ( trick_mode _control = = freeze_frame ) {

 

 

field_id

 2

uimsbf

reserviert

 3

bslbf

}

 

 

sonst wenn ( trick_mode _control = = fast_reverse ) {

 

 

field_id

 2

bslbf

intra_slice_refresh

 1

bslbf

frequenz_truncation

 2

bslbf

else if ( trick_mode_control = = slow_reverse ) {

 

 

rep_cntrl

 5

uimsbf

}

 

 

sonst

 

 

reserviert

 5

bslbf

}

 

 

if ( Additional_copy_info_flag = ='1'){

 

 

marker_bit

 1

bslbf

additional_copy_info

 7

bslbf

}

 

 

if (PES_CRC_flag=='1'){

 

 

previous_PES_packet_CRC

16

bslbf

}

 

 

if ( PES_extension_flag =='1') {

 

 

PES_private_data_flag

 1

bslbf

pack_header_field_flag

 1

bslbf

program_packet_sequence_counter_flag

 1

bslbf

P-STD_buffer_flag

 1

bslbf

reserviert

 3

bslbf

PES_extension_flag_2

 1

bslbf

if(PES_private_data_flag =='1'){

 

 

PES_private_data

128

bslbf

}

 

 

if (pack_header_field_flag == '1'){

 

 

pack_field_length

 8

uimsbf

pack_header()

 

 

}

 

if (program_packer_sequence_counter_flag == '1'){

 

 

marker_bit

 1

bslbf

program_packet_sequence_counter

 7

uimsbf

Marker -bit

 1

bslbf

MPEG1_MPEG2_indentifier

 1

bslbf

original_stuff_length

 6

uimsbf

}

 

if (P-STD_buffer_flag = = '1'({

 

 

'01'

 2

bslbf

P-STD_buffer_scale

 1

bslbf

P-STD_buffer_size

13

uimsbf

}

 

 

if (PES_extension_flag_2 == '1'{

 

 

marker_bit

 1

bslbf

PES_extension_field_length

 7

uimsbf

for(i=0;i< ;PES_extension_field_length;i++){

 

 

reserviert

 8

bslbf

}

 

 

}

 

 

}

 

 

für (i=0;i

 

 

stuffing_byte

 8

bslbf

}

 

 

für (i=0;i

 

 

PES_packet_data_byte

 8

bslbf

}

 

 

}

 

 

else if (stream_id = = program_stream_map

 

 

||. stream_id = = private_stream_2

 

 

||. stream_id = = ECM

 

 

| |. stream_id = = EMM

 

 

|| = = program_stream_directory

 

 

|| DSMCC_stream

 

 

|| stream_id = = ITU-. T Rec. H.222.1 Typ E Stream ){

 

 

for (i=0;i

 

 

PES_packet_data_byte

 8

bslbf

}

 

 

}

 

 

else if (steam_id = = padding_stream){

 

 

for (i=0;i

 

 

padding_byte

 8

bslbf

}

 

 

}

 

 

}

 

 

Unter ihnen:

Tabelle 2-18 Stream_id-Zuweisung

stream_id

Hinweis

Stream-Kodierung

1011 1100

1

program_stream_map(0xBC)

1011 1101

2

private_stream_1(0xBD)

1011 1110

padding_stream(0xBE)

1011 1111

3

private_stream-2(0xBF)

110x xxxx

GB/T XXXX.3 oder GB/T AAAA.3 Audio-Stream-Nummer xxxx (0xC0~0xDF )

1110 xxxx

GB/T XXXX. 2 Oder GB/T AAAA.2 Videostream-Nummer xxxx (0xE0~0xEF)

1111 0000

3

ECM_stream(0xF0)

1111 0001

3

EMM_stream(0xF1)

1111 0010

5

GB/T XXXX.1 Anhang B oder GB/T XXXX.6_DSMCC_stream(0xF2)

1111 0011

2

ISO/IEC_13522_stream(0xF3)

1111 0100

6

ITU-T Rec. H.222.1 Typ A

1111 0101

6

ITU-T Rec. H.222.1 Typ B

1111 0110

6

ITU-T Rec

1111 0111

6

ITU-T Rec. H .222.1 Typ D

1111 1000

6

ITU -T Rec. H.222.1 Typ E

1111 1001

7

ancillary_stream(0xF9)

1111 1010…1111 1110

Datenstrom erhalten

1111 1111

4

program_stream_directory(0xFF)

Das Symbol x zeigt an, dass die Werte „0“ oder „1“ beide zulässig sind und dasselbe bewirken können Stream-Typ. Die Streamnummer wird durch den Wert von x bestimmt.

Hinweis

1

PES-Pakete vom Typ program_stream_map haben eine eindeutige Syntax, die in 2.5.4.1 angegeben ist.

2 PES-Pakete vom Typ private_stream_1 und ISO/IEC_13352_stream befolgen dieselbe PES-Paketsyntax wie GB/T XXXX.2- und GB/T XXXX.3-Audiostreams.

3 PES-Pakete vom Typ private_stream_2, ECM_stream und EMM_stream ähneln private_stream_1, außer dass nach dem Feld PES_packet_length keine Syntax angegeben wird.

4 PES-Pakete vom Typ program_stream_directory haben eine eindeutige Syntax, die in 2.5.5 spezifiziert ist.

5 PES-Pakete vom Typ DSM_CC_stream haben eine einzigartige Syntax, die in GB/T XXXX.6 spezifiziert ist.

6 stream_id ist mit stream_type 0x09 in Tabelle 2-29 verknüpft.

7 stream_id wird nur für die PES-Gruppierung verwendet. PES-Pakete transportieren Daten, die aus Programmströmen oder GB/T AAAA.1-Systemströmen im Transportstrom stammen (siehe 2.4.3.7).

Semantische Definition jedes Felds im PES-Paket

Paketstartcode-Präfixfeld packet_start_code_prefix

24-Bit-Code, der der ist Das Gleiche wie die folgende stream_id stellt den Paketstartcode dar, der den Anfang des Pakets identifiziert. Es handelt sich um eine Bitfolge mit dem Wert „0000 0000 0000 0000 0000 0001“ (0x000001).

Stream-Identifikationsfeld stream_id

Im Programm-Stream gibt es die Nummer und den Typ des Basis-Streams an. Definitionen finden Sie in Tabelle 2-18. In einem Transportstrom kann er auf jeden gültigen Wert gesetzt werden, der den in Tabelle 2-18 definierten Elementarstromtyp korrekt beschreibt. Bei Transportströmen wird der elementare Streamtyp in den programmspezifischen Informationen von 2.4.4 angegeben.

PESPaketlängenfeld PES_packet_length

16-Bit-Feld, das die Anzahl der Bytes angibt, die diesem Feld im PES-Paket folgen. Ein Wert von 0 gibt an, dass die PES-Paketlänge entweder nicht spezifiziert oder unbegrenzt ist. Dies ist nur in PES-Paketen zulässig, deren Nutzlast Bytes enthält, die aus einem der Videoelementarströme im Transport Stream-Paket stammen.

PESScrambling-Kontrollfeld PES_scrambling_control

2-Bit-Feld, das die Scrambling-Methode der PES-Paketnutzlast angibt. Wenn die Verschlüsselung auf der PES-Ebene erfolgt, darf der PES-Paket-Header, einschließlich optionaler Felder, falls vorhanden, nicht verschlüsselt werden (siehe 2-19).

PESPrioritätsfeld PES_priority

1-Bit-Feld, das die Priorität der Nutzlast im PES-Paket angibt. „1“ gibt an, dass die Nutzlast im PES-Paket eine höhere Priorität hat als die Nutzlast des PES-Pakets, wobei dieses Feld auf „0“ gesetzt ist. Der Multiplexer kann dieses Feld verwenden, um Daten in den Elementarströmen zu priorisieren. Der Transportmechanismus sollte dieses Feld nicht ändern.

Datenausrichtungsindikatorfeld data_alignment_indicator

1-Bit-Flag. Wenn es auf „1“ gesetzt ist, bedeutet dies, dass auf den PES-Paket-Header der Video-Startcode oder das Audio-Synchronisationswort folgt, auf das der data_alignment_indicator in 2.6.10 hinweist, wenn ein data_alignment_indicator-Deskriptor vorhanden ist. Wenn der Wert „1“ ist und kein solcher Deskriptor vorhanden ist, ist die durch „alignment_type“ „01“ in den Tabellen 2-47 und 2-48 dargestellte Ausrichtung erforderlich. Wenn der Wert „0“ ist, ist nicht definiert, ob eine solche Ausrichtung vorliegt.

Copyright-Feld Copyright

1-stelliges Feld. Wenn der Wert auf „1“ gesetzt ist, bedeutet dies, dass das Material in der zugehörigen PES-Paketnutzlast urheberrechtlich geschützt ist. Wenn der Wert „0“ ist, ist nicht definiert, ob das Material urheberrechtlich geschützt ist. Die in 2.6.24 beschriebenen Copyright-Deskriptoren sind mit elementaren Streams verknüpft, die PES-Pakete enthalten. Wenn der Deskriptor auf Material angewendet wird, das PES-Pakete enthält, wird das Copyright-Flag auf „1“ gesetzt.

Original- oder Kopiefeld original_or_copy

1-Bit-Feld. Wenn der Wert auf „1“ gesetzt ist, bedeutet dies, dass der Inhalt der zugehörigen PES-Paket-Nutzdaten original ist; ein Wert von „0“ zeigt an, dass es sich bei den Inhalten der zugehörigen PES-Paket-Nutzdaten um eine Kopie handelt.

PTS DTS Flag-Feld PTS_DTS_flags

2-Bit-Feld. Wenn der Wert „10“ ist, sollte das PTS-Feld im PES-Gruppenheader erscheinen; wenn der Wert „11“ ist, sollten sowohl das PTS-Feld als auch das DTS-Feld im PES-Gruppenheader erscheinen; , das PTS-Feld Weder die noch DTS-Felder erscheinen im PES-Paket-Header. Der Wert „01“ ist nicht zulässig.

ESCRFlag-Feld ESCR_flag

1-Bit-Flag. Wenn es auf „1“ gesetzt ist, bedeutet dies, dass die ESCR-Basis- und erweiterten Felder im PES-Paket-Header erscheinen; ein Wert von „0“ bedeutet, dass kein ESCR-Feld vorhanden ist.

ESRate-Flag-Feld ES_rate_flag

1-Bit-Flag. Wenn es auf „1“ gesetzt ist, bedeutet dies, dass das Feld „ES_rate“ im PES-Paket-Header erscheint; ein Wert von „0“ bedeutet, dass kein Feld „ES_rate“ vorhanden ist.

DSMTrick-Modus-Flag-Feld DSM_trick_mode_flag

1-Bit-Flag. Wenn der Wert auf „1“ gesetzt ist, bedeutet dies, dass ein 8-Bit-Stunt-Modus-Feld vorhanden ist. Wenn der Wert „0“ ist, bedeutet dies, dass kein solches Feld vorhanden ist.

Zusätzliches Copyright-Informations-Flag-Feld „additional_copy_info_flag“

1-Bit-Flag. Wenn der Wert auf „1“ gesetzt ist, bedeutet dies, dass ein zusätzliches Kopierinformationsfeld vorhanden ist. Wenn der Wert „0“ ist, bedeutet dies, dass kein solches Feld vorhanden ist.

PES CRCFlag-Feld PES_CRC_flag

1-Bit-Flag. Wenn es auf „1“ gesetzt ist, bedeutet dies, dass das CRC-Feld im PES-Paket-Header erscheint; ein Wert von „0“ bedeutet, dass es kein solches Feld gibt.

PESErweiterungs-Flag-Feld PES_extension_flag

1-Bit-Flag. Bei der Einstellung „1“ bedeutet dies, dass im PES-Paket-Header ein Erweiterungsfeld vorhanden ist. Ein Wert von „0“ bedeutet, dass kein solches Feld vorhanden ist.

PESHeader-Datenlängenfeld PES_header_data_length

8-Bit-Feld. Gibt die Gesamtzahl der von optionalen Feldern belegten Bytes und alle im PES-Paket-Header enthaltenen Füllbytes an. Die diesem Feld vorangehenden Bytes geben an, ob optionale Felder vorhanden sind.

Markerbitfeld marker_bit

Ein 1-Bit-Feld mit dem Wert „1“.

Zeitstempelfeld PTS anzeigen

Die Beziehung zwischen Präsentationszeit und Decodierungszeit ist wie folgt: PTS ist eine 33-Bit-Zahl, die in drei separaten Feldern codiert ist. Es zeigt die Präsentationszeit tpn(k) der k-ten Präsentationseinheit des Basisstroms n im Systemzieldecoder an. Der Wert von PTS wird in Einheiten von 1/300 der Systemtaktfrequenz (d. h. 90 kHz) angegeben. Die Anzeigezeit wird von PTS gemäß Gleichung 2-11 berechnet. Siehe 2.7.4 für Einschränkungen hinsichtlich der Häufigkeit der Codierung von Präsentationszeitstempeln.

PTS(k)=((system_clock_frequenz×tpn(k)) p 300) % 233 (2-11)

Unter diesen ist tpn(k) die Anzeigeeinheit P Die Anzeigezeit von n(k).

Wenn bei Audio ein PTS im PES-Gruppenheader vorhanden ist, bezieht sich dieser auf die erste Zugriffseinheit, die in der PES-Gruppe beginnt. Wenn das erste Byte der Audio-Zugriffseinheit im PES-Paket vorhanden ist, dann gibt es eine Audio-Zugriffseinheit, die im PES-Paket beginnt.

Wenn sich bei Videos PTS im PES-Paket-Header befindet, bezieht es sich auf die Zugriffseinheit, die den ersten Bildstartcode enthält, der im PES-Paket beginnt. Wenn das erste Byte des Bildstartcodes in der PES-Gruppe vorhanden ist, dann gibt es einen Bildstartcode, der in der PES-Gruppe beginnt.

Für die Audio-Präsentationseinheit (PU), die Video-PU und das B-Bild in der Low_Delay-Sequenz sollte die Präsentationszeit tpn(k) gleich tdn(k) .

Für I-Bilder und P-Bilder ohne niedrige_Verzögerung sollte die Präsentationszeit tp

n(k) gleich sein, wenn zwischen den Zugriffseinheiten (AU) k und k' keine Dekodierungsdiskontinuität besteht zum Dekodierungszeitpunkt des nächsten übertragenen I-Bildes bzw. P-Bildes tdn(k) (siehe 2.7.5). Wenn es eine Dekodierungsunterbrechung oder einen Stromabbruch gibt, sollte die Differenz zwischen tpn(k) und tdn(k) mit dem ursprünglichen Strom ohne Unterbrechung oder Abbruch genau gleich bleiben Dasselbe.

Hinweis 1: Die low_delay-Sequenz ist die Videosequenz mit gesetztem low_delay-Flag (siehe 6.2.2.3 in GB/T XXXX.2).

Wenn das Audio gefiltert wird, geht das Systemmodell davon aus, dass die Filterung keine Latenz verursacht. Daher sind die am PTS während der Codierung beteiligten Samples dieselben wie die am PTS während der Decodierung beteiligten Samples. Informationen zur skalierbaren Kodierung finden Sie unter 2.7.6.

Zeitstempelfeld DTS dekodieren

DTS ist eine 33-Bit-Zahl, die in drei separaten Feldern kodiert ist. Sie gibt die Dekodierungszeit td

n(j) der j-ten Darstellungseinheit des Elementarstroms n im Systemzieldekodierer an. Der Wert von DTS wird in Einheiten von 1/300 der Systemtaktfrequenz (d. h. 90 kHz) angegeben. Die Dekodierungszeit wird von DTS gemäß Gleichung 2-12 berechnet:

DTS(j)=((system_clock_frequenz×td n(j)) p 300) % 233 (2-12)

Unter ihnen td

n( j) ist die Dekodierungszeit der Zugriffseinheit An(j).

Wenn sich bei Videos DTS im PES-Paket-Header befindet, bezieht es sich auf die Zugriffseinheit, die den ersten Bildstartcode enthält, der im PES-Paket beginnt. Wenn das erste Byte des Bildstartcodes in der PES-Gruppe vorhanden ist, beginnt der Bildstartcode in der PES-Gruppe.

Informationen zur skalierbaren Kodierung finden Sie unter 2.7.6.

ESCR Feld ESCR_base, ESCR_extension

42-Bit-Feld, in zwei Teilen codiert. Der erste Teil ist ein Feld mit einer Länge von 33 Bit und sein Wert ESCR_base(i) ist durch Gleichung 2-14 gegeben; der zweite Teil ist ein Feld mit einer Länge von 9 Bit und sein Wert ESCR_ext(i) ist gegeben durch Gleichung 2-15. Das ESCR-Feld gibt die erwartete Zeit an, die das Byte mit dem letzten Bit von ESCR_base im Elementarstrom benötigt, um am PES-STD-Ausgang anzukommen (siehe 2.5.2.4).

Speziell

ESCR(i)=ESCR_base(i)×300+ESCR_ext(i) (2-13)

Unter ihnen:

ESCR_base(i) =((system_clock_frequenz×t(i)) p 300) % 233           (2-14)

ESCR _ext(i)=((system_clock_frequenz×t(i)) p 1) % 300                              (2-15) Die Felder

ESCR und ES_rate (siehe Semantik direkt unten) enthalten Timing-Informationen im Zusammenhang mit der PES-Stream-Sequenz. Diese Felder müssen die in 2.7.3 definierten Einschränkungen erfüllen.

Basis-Stream-Rate-Feld ES_rate

22-Bit-Ganzzahl ohne Vorzeichen. Bei PES-Streams gibt es die Rate an, mit der der Zieldecoder des Systems PES-Pakete empfängt. Dieses Feld ist in dem PES-Paket, zu dem es gehört, und in nachfolgenden PES-Paketen desselben PES-Streams gültig, bis ein neues ES_rate-Feld angetroffen wird. Der Wert dieses Feldes ist in Einheiten von 50 Bytes/Sekunde angegeben und darf nicht 0 sein. Dieses Feld wird verwendet, um den Zeitpunkt zu definieren, zu dem Bytes des PES-Streams am P-STD-Eingang ankommen (siehe Definition in 2.5.2.4). Der in diesem Feld codierte Wert kann zwischen PES-Paketen unterschiedlich sein.

Trickmodus-Kontrollfeld trick_mode_control

3-Bit-Feld. Es stellt einen Stunt-Modus dar, der auf den zugehörigen Videostream angewendet wird. Für andere Arten von Elementarströmen ist die Bedeutung dieses Feldes und der folgenden fünf Bits nicht definiert. Die Definition des trick_mode-Status finden Sie im Abschnitt „trick mode“ in 2.4.2.3.

Wenn der trick_mode-Status falsch ist, wird für GB/T XXXX.2-Video die Nummer N jedes Frames in der vom Decodierungsprozess ausgegebenen progressiven Sequenz durch die Felder „repeat_first_field“ und „top_field_first“ angegeben. Bei GB/T AAAA.2-Videos wird dies durch den Sequenztitel bestimmt.

Wenn bei Interlaced-Sequenzen der trick_mode-Status „false“ ist, wird für GB/T XXXX.2-Video die Häufigkeit N durch die Felder „repeat_first_field“ und „progressive_frame“ angegeben.

Wenn der trick_mode-Status wahr ist, hängt die Anzahl der Bildwiedergaben vom Wert N ab.

Tabelle 2-20 Stunt-Modus-Steuerwerte

'001' Langsamer

描  述

'000'

快进

'001'

慢动作

'010'

冻结帧

'011'

快倒

'100'

慢倒

'101'-'111'

保留

Wert
Beschreibung
'000' Schneller Vorlauf
Zeitlupe
'010' Einfrieren Rahmen
'011' Schnellrücklauf
'100'
'101 ' -'111' Reserviert

Wenn sich der Wert dieses Feldes ändert oder der Stunt-Modus-Betrieb gestoppt wird, kann eine beliebige Kombination der folgenden Situationen auftreten:

l Die Zeitbasis ist diskontinuierlich;

l Die Dekodierung ist diskontinuierlich;

l Der Kontinuitätszähler ist diskontinuierlich;

Im Falle des Trickmodus kann die nicht standardmäßige Geschwindigkeit der Dekodierung und Präsentation dazu führen, dass einige Felder in den Video-Elementarstromdaten definiert sind falsche Werte. Ebenso können semantische Einschränkungen für Fragmentstrukturen ungültig sein. Die an diesen Ausnahmen beteiligten Videosyntaxelemente sind: v_axis_positive;

l field_sequence;

l subcarrier;

l Burst_amplitude;

l subcarrier_phase;

Im Trickmodus sollte der Decoder nicht von der Kodierung der Werte in diesen Feldern abhängig sein.

Der Standard verlangt nicht, dass der Decoder das Feld trick_mode_control dekodieren kann. Decoder, die dieses Feld dekodieren können, müssen jedoch die folgenden Standardanforderungen erfüllen.

Schneller Vorlauf, schneller Vorwort

Der Wert „000“ im Feld „trick_mode_control“. Wenn dieser Wert vorhanden ist, stellt er einen Fast-Forward-Videostream dar und definiert die Bedeutung der folgenden 5 Bits im PES-Paket-Header. Das intra_slice_refresh-Bit kann auf „1“ gesetzt werden, um anzuzeigen, dass möglicherweise Makroblöcke fehlen. Der Decoder kann den Makroblock an derselben Position im vorherigen decodierten Bild ersetzen. Das in Tabelle 2-21 definierte Feld field_id gibt an, welches Feld oder welche Felder angezeigt werden sollen. Das Feld „frequenz_truncation“ gibt einen eingeschränkten Satz von Koeffizienten an, die enthalten sein können. Die Bedeutung dieses Feldwerts ist in Tabelle 2-22 dargestellt.

Zeitlupe in Zeitlupe

Der Wert „001“ im Feld „trick_mode_control“. Wenn dieser Wert vorhanden ist, stellt er einen Zeitlupen-Videostream dar und definiert die Bedeutung der folgenden 5 Bits im PES-Paket-Header. Bei progressiven Sequenzen sollte das Bild N×rep_cntrl lang angezeigt werden, wobei N wie oben definiert ist.

Für GB/T AAAA.2-Video und GB/T XXXX.2-Video-Progressive-Sequenz sollte das Bild für die Zeit N×rep_cntrl angezeigt werden, wobei N wie oben definiert ist.

Für GB/T XXXX.2-Interlaced-Sequenzen sollte dieser Bildschirm N×rep_cntrl-Zeit lang angezeigt werden. Wenn es sich bei dem Bild um ein Rahmenbild handelt, sollte das erste anzuzeigende Feld das obere Feld sein, wenn top_field_first 1 ist, und das untere Feld, wenn top_field_first 0 ist (siehe GB/T XXXX.2). Dieses Feld wird N×rep_cntrl/2 Mal angezeigt. Die anderen Felder des Bildschirms werden N-N×rep_cntrl/2 Mal angezeigt.

Standbild-Standbild

Der Wert „010“ im Feld „trick_mode_control“. Wenn dieser Wert erscheint, stellt er den Freeze-Frame-Videostream dar und definiert die Bedeutung der folgenden 5 Bits im PES-Paket-Header. Das in Tabelle 2-21 definierte Feld field_id gibt an, welche Felder angezeigt werden sollen. Das Feld field_id gibt die erste Videozugriffseinheit an, die im PES-Paket beginnt, das dieses Feld enthält, es sei denn, das PES-Paket enthält 0 Nutzlastbytes. Im letzteren Fall gibt das Feld field_id die jüngste vorherige Videozugriffseinheit an.

Schnellrücklauf

Der Wert „011“ im Feld „trick_mode_control“. Wenn dieser Wert vorhanden ist, stellt er einen zurückgespulten Videostream dar und definiert die Bedeutung der folgenden 5 Bits im PES-Paket-Header. Das intra_slice_refresh-Bit kann auf „1“ gesetzt werden, um anzuzeigen, dass möglicherweise Makroblöcke fehlen. Der Decoder kann den Makroblock an derselben Position im vorherigen decodierten Bild ersetzen. Das in Tabelle 2-21 definierte Feld field_id gibt an, welches Feld oder welche Felder angezeigt werden sollen. Das Feld „frequenz_truncation“ gibt einen eingeschränkten Satz von Koeffizienten an, die enthalten sein können. Die Bedeutung dieses Feldwerts ist in Tabelle 2-22 „Koeffizientenauswahlwert“ dargestellt.

langsamer Rückwärtsgang, langsamer Rückwärtsgang

Der Wert „100“ im Feld „trick_mode_control“. Wenn dieser Wert vorhanden ist, stellt er einen Slow-Reverse-Videostream dar und definiert die Bedeutung der folgenden 5 Bits im PES-Paket-Header. Für GB/T AAAA.2-Video und GB/T XXXX.2-Video-Progressive-Sequenz sollte das Bild für die Zeit N×rep_cntrl angezeigt werden, wobei N wie oben definiert ist.

Für GB/T XXXX.2-Interlaced-Sequenzen sollte dieser Bildschirm N×rep_cntrl-Zeit lang angezeigt werden. Wenn es sich bei dem Bild um ein Rahmenbild handelt, sollte das erste anzuzeigende Feld das untere Feld sein, wenn top_field_first 1 ist, und das obere Feld, wenn top_field_first „0“ ist (siehe GB/T XXXX.2). Dieses Feld wird N×rep_cntrl/2 Mal angezeigt. Die anderen Felder des Bildschirms werden N-N×rep_cntrl/2 Mal angezeigt.

Feldidentifikationsfeld field_id

Zweistelliges Feld, das angibt, welche Felder angezeigt werden sollen. Codieren Sie es gemäß Tabelle 2-21.

Tabelle 2-21 Feldsteuerwert field_id

'01'

描  述

'00'

仅自顶向下播放

'01'

仅自底向上播放

'10'

播放所有帧

'11'

保留

Wert

Beschreibung
'00'

Nur ​​von oben nach unten abspielen

Nur ​​von unten nach oben abspielen

td>

'10'

Alle Frames abspielen

描述

'00'

仅DC系数非0

'01'

仅前三个系数非0

'10'

仅前六个系数非0

'11'

所有系数均可能非0

'11' Reserviert
Intra-Slice-Referenzfeld intra_slice_refresh 1-Bit-Flag. Bei der Einstellung „1“ bedeutet dies, dass möglicherweise Makroblöcke in den codierten Videodaten des PES-Pakets fehlen. Bei der Einstellung „0“ bedeutet dies, dass die obige Situation möglicherweise nicht auftritt. Weitere Informationen finden Sie unter GB/T XXXX.2. Der Decoder kann den verlorenen Makroblock durch einen Makroblock an derselben Position im vorherigen decodierten Bild ersetzen. Frequency Truncation Field Frequency_Truncation2-Bit-Feld. Weist darauf hin, dass beim Kodieren von Daten in PES-Paketen möglicherweise ein eingeschränkter Satz von Koeffizienten verwendet wird. Sein Wert ist in Tabelle 2-22 definiert. Tabelle 2-22 Koeffizientenauswahlwerte Tabelle>

Display count control field rep_cntrl

5-stelliges Feld, das die Anzahl der Anzeigezeiten für jedes Feld im Interlaced-Bildschirm oder die Anzahl der progressiven Bildschirmanzeigen angibt. Ob bei Interlaced-Bildern das obere oder das untere Halbbild zuerst angezeigt werden soll, ist eine Funktion des Feldes trick_mode_control und des Feldes top_field_first im Videosequenz-Header. Dieser Feldwert darf nicht „0“ sein.

Zusätzliches Copyright-Informationsfeld „additional_copy_info“

7-Bit-Feld, das spezielle Daten im Zusammenhang mit Copyright-Informationen enthält.

Vorheriges PESPaket-CRC Feld previous_PES_packet_CRC

16-Bit-Feld. Dieses Feld enthält einen CRC-Wert, der nach der Verarbeitung des vorherigen PES-Pakets (mit Ausnahme des Headers dieses PES-Pakets) eine 0-Ausgabe in den 16 Registern des Decoders generiert. Dieser CRC-Wert ähnelt dem in Anhang A definierten, jedoch mit dem folgenden Polynom: 🎜>

Hinweis 2: Dieser CRC-Wert dient der Netzwerkwartung, z. B. der Isolierung von Quellen intermittierender Fehler, und ist nicht für die Verwendung durch gedacht der elementare Stream-Decoder. Es wird nur zum Zählen von Datenbytes verwendet, da die Headerdaten des PES-Pakets während der Übertragung geändert werden können.

PESPrivate-Data-Flag-Feld PES_private_data_flag

1-Bit-Flag. Bei der Einstellung „1“ bedeutet dies, dass der PES-Paket-Header spezielle Daten enthält; bei der Einstellung „0“ bedeutet dies, dass der PES-Paket-Header keine speziellen Daten enthält.

Pack-Header-Feld-Flag-Feld pack_header_field_flag 1-Bit-Flag. Bei der Einstellung „1“ bedeutet dies, dass der PES-Paket-Header einen GB/T AAAA.2-Paket-Header oder einen Programm-Stream-Paket-Header enthält. Wenn sich dieses Feld in einem PES-Paket befindet, das in einem Programmstream enthalten ist, muss sein Wert „0“ sein. Im Transportstrom bedeutet ein Wert von „0“, dass im PES-Header kein Paket-Header vorhanden ist.

Flag-Feld für die Anzahl der Programmpaketsequenzen program_packet_sequence_counter_flag

1-Bit-Flag. Der Wert „1“ gibt an, dass das PES-Paket die Felder „program_packet_sequence_counter“, „MPEG1_MPEG2_identifier“ und „original_stuff_length“ enthält. Der Wert „0“ gibt an, dass diese Felder nicht im PES-Paket-Header enthalten sind.

P-STD

Puffer-Flag-Feld P-STD_buffer_flag

1-Bit-Flag. Wenn es auf „1“ gesetzt ist, bedeutet dies, dass der PES-Paket-Header die Felder „P-STD_buffer_scale“ und „P-STD_buffer_size“ enthält. Der Wert „0“ gibt an, dass diese Felder nicht im PES-Header enthalten sind.

PESErweiterungs-Flag-Feld PES_extension_flag_2

1-Bit-Flag, wenn es auf „1“ gesetzt ist, zeigt es an, dass PES_extension_field_length und verwandte Felder vorhanden sind .

PESPrivates Datenfeld PES_private_data

16-Bit-Feld. Enthält private Daten. Wenn diese Daten mit den Feldern davor und danach kombiniert werden, können sie nicht mit packet_start_code_prefix (0x000001) in Konflikt geraten.

Paketfeldlänge Feld pack_field_length 8-Bit-Feld. Stellt die Länge von pack_header_field() in Bytes dar.

Feld zur Anzahl der Programmpaketsequenzen program_packet_sequence_counter

7-Bit-Feld. Es handelt sich um einen optionalen Zähler, der mit jedem nachfolgenden PES-Paket aus einem Programm-Stream oder GB/T AAAA.1-Stream oder PES-Paket mit einer einzelnen Programmdefinition in einem Transport-Stream erhöht wird, um Konsistenz mit dem Kontinuitätszähler zu gewährleisten (siehe 2.4.3.2). für ähnliche Funktionalität. Es kann verwendet werden, um die anfängliche PES-Paketsequenz im Programmstream oder den ursprünglichen GB/T AAAA.1-Stream abzurufen. Dieser Zähler geht nach Erreichen seines Maximalwerts auf 0 zurück. PES-Gruppen können nicht wiederholt werden. Daher sollten zwei aufeinanderfolgende PES-Pakete in einem zusammengesetzten Programm nicht denselben program_packet_sequence_counter-Wert haben.

MPEG1 MPEG2

Identifier-Feld MPEG1_MPEG2_identifier

1-Bit-Flag. Bei der Einstellung „1“ bedeutet dies, dass die vom PES-Paket übertragenen Informationen aus dem GB/T AAAA.1-Stream stammen. Bei der Einstellung „0“ bedeutet dies, dass die vom PES-Paket übertragenen Informationen aus dem Programmstream stammen .

Anfängliches

Original-Stopflängenfeldoriginal_stuff_length

6-Bit-Feld. Gibt die Anzahl der Füllbytes an, die im anfänglichen GB/T XXXX.1-Paketheader oder im anfänglichen GB/T AAAA.1-Paketheader verwendet werden.

P-STDPufferskalenfeld P-STD_ buffer_scale

1-Bit-Feld. Es ist nur sinnvoll, wenn das PES-Paket im Programmstream enthalten ist. Es gibt den Skalierungsfaktor an, der zur Interpretation nachfolgender P-STD_buffer_size-Felder verwendet wird. Wenn die vorherige stream_id einen Audiostream darstellt, sollte der Wert dieses Felds „0“ sein; wenn die vorherige stream_id einen Videostream darstellt, sollte der Wert dieses Felds „1“ sein. Für alle anderen Stream-Typen kann der Wert „0“ oder „1“ sein.

P-STDPuffergrößenfeld P-STD_buffer_size

13-Bit-Ganzzahl ohne Vorzeichen. Es ist nur sinnvoll, wenn das PES-Paket im Programmstream enthalten ist. Es definiert die Größe des P-STD-Eingabepuffers BSn. Wenn der Wert von P-STD_buffer_scale „0“ ist, misst P-STD_buffer_size die Größe des Puffers in Einheiten von 128 Byte. Wenn der Wert von P-STD_buffer_scale „1“ ist, misst P-STD_buffer_size die Größe des Puffers in Einheiten von 1024 Byte. Deshalb:

if ( P-STD_buffer_scale == 0)

BSn=P-STD_buffer_size ×128                                                                                                                                   2-17)

Wenn dieses Feld vom Zieldecoder des GB/T XXXX.1-Systems empfangen wird, sein Codierungswert wird sofort wirksam.

PESErweiterungsfeldlängenfeld PES_extension_field_length 7-Bit-Feld. Gibt die Länge in Bytes der Daten an, die diesem Feld im PES-Erweiterungsfeld folgen, bis einschließlich aller reservierten Bytes.

Stopfbyte-Feld stuffing_byte

8-Bit-Feld mit einem konstanten Wert von „1111 1111“. Kann durch den Encoder eingefügt werden, um den Anforderungen des Kanals usw. gerecht zu werden. Der Decoder verwirft dieses Feld. In einem PES-Paket-Header dürfen nur 32 Füllbytes erscheinen.

PES

Paketdaten-Bytefeld PES_packet_data_byte

Dieses Feld sollte fortlaufend ab dem Elementarstrom sein, der durch die Stream_ID- oder PID-Datenbytes des Pakets angegeben wird. Wenn Elementarstromdaten GB/T XXXX.2 oder GB/T XXXX.3 entsprechen, muss dieses Feld aus Bytes bestehen, die an den Bytes dieses Standards ausgerichtet sind. Die Endianness elementarer Streams sollte beibehalten werden. Die Anzahl der Bytes in diesem Feld, N, wird durch das Feld PES_packet_length angegeben. N muss gleich PES_packet_length minus der Anzahl der Bytes zwischen dem letzten Byte des Feldes PES_packet_length und dem ersten PES_packet_data_byte sein.

Padding-Byte-Feld padding_byte

8-Bit-Feld, sein Wert ist konstant „1111 1111“. Dieses Feld wird vom Decoder verworfen. Weitere PS-Stream-Formate und Analysezusammenfassungen finden Sie auf der chinesischen PHP-Website für verwandte Artikel!

Wert Beschreibung
'00' Nur ​​der DC-Koeffizient ist ungleich 0
'01' Nur ​​die ersten drei Koeffizienten sind ungleich 0
'10' Nur ​​die ersten sechs Koeffizienten sind ungleich 0
'11' Alle Koeffizienten können ungleich Null sein
Verwandte Etiketten:
ps
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!