Maison >interface Web >Tutoriel PS >Résumé du format et analyse du flux PS

Résumé du format et analyse du flux PS

高洛峰
高洛峰original
2017-02-15 09:43:154494parcourir

Pour les flux PS, récemment, en raison de besoins professionnels, j'ai étudié le format du flux PS et le processus de déballage en MPEG2.

Nous devons d'abord savoir quel est le format du flux de paquets PS :

Effectuez l'empaquetage PS suivant pour H264 : Chaque NALU IDR contient généralement des NALU telles que SPS et PPS, donc encapsulez le NALU de SPS, PPS et IDR dans un package PS, y compris l'en-tête ps, puis ajoutez l'en-tête du système PS, la carte du système PS et les données brutes h264 de l'en-tête PES. Par conséquent, l'ordre de l'extérieur vers l'intérieur d'un paquet IDR NALU PS est le suivant : PSheader | PS system Header | PS system Header | Pour les autres paquets PS sans image clé, c'est beaucoup plus simple. Il suffit d'ajouter directement l'en-tête PS et l'en-tête PES. L'ordre est le suivant : en-tête PS | En-tête PES | données h264raw. Ce qui précède concerne le cas où il n’y a que de la vidéo. Si vous souhaitez regrouper l’audio dans le package PS, vous pouvez également le faire. Lorsqu'il y a des données audio, ajoutez simplement l'en-tête PES aux données et placez-le après le PES vidéo. La séquence est la suivante : paquet PS = en-tête PS | PES (vidéo) | PES (audio), puis utilisez RTP pour l'encapsuler et l'envoyer.

Ce qui précède est un format d'encapsulation global pour le flux de données. Examinons chaque partie de chaque encapsulation :

PS流的格式和解析总结

La première est. la partie PSheader : (à partir du document chinois standard MPEG2)

Syntaxe

bit Numéro

Mnémonique

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

    réservé

5

bslbf

    pack_stuffing_length

3

uimsbf

    pour (i=0;i

 

 

        stuffing_byte

8

bslbf

    }

 

 

    if (nextbits()==system_header_start_code) {

 

 

        system_header()

 

 

    }

 

 

}

 

 

La définition sémantique de chaque champ dans le paquet de flux de programme (en-tête PS) :

Champ du code de démarrage du pack pack_start_code

La valeur est une chaîne de bits '0000 0000 0000 0000 0000 0001 1011 1010' (0x000001BA), utilisée pour marquer le début d'un paquet.

Champ de référence de l'horloge système system_clock_reference_base, system_clock_reference_extenstion

La référence de l'horloge système (SCR) est un champ de 42 bits codé en deux parties. La première partie system_clock_reference_base est un champ d'une longueur de 33 bits, et sa valeur SCR_base(i) est donnée par l'équation 2-19 ; la deuxième partie system_clock_reference_extenstion est un champ d'une longueur de 9 bits, et sa valeur SCR_ext( i) est donné par l’équation 2-20 donnée. Le champ SCR indique le temps attendu pour que l'octet du flux élémentaire contenant le dernier bit de ESCR_base arrive à l'entrée du décodeur cible du programme.

Voir 2.7.1 pour les exigences de fréquence de codage du champ SCR.

Champ de bit marqueur marqueur_bit

Champ de 1 bit, valeur '1'.

Champ de débit composite du programme program_mux_rate

Un entier de 22 bits spécifiant la fréquence à laquelle le P-STD reçoit le flux du programme pendant le paquet contenant ce champ. Sa valeur est en unités de 50 octets/seconde. Une valeur de 0 n'est pas autorisée. La valeur représentée par ce champ est utilisée pour définir l'heure d'arrivée de l'octet à l'entrée P-STD en 2.5.2. La valeur de ce champ peut être différente dans différents paquets du flux composite multiplexé du programme dans cette norme.

Champ de longueur de bourrage du pack pack_stuffing_length

Entier à 3 chiffres, spécifie le nombre d'octets de bourrage après ce champ.

Champ d'octet de remplissage stuffing_byte

Champ de 8 bits, la valeur est toujours '1111 1111'. Ce champ peut être inséré par l'encodeur, par exemple pour répondre aux besoins du canal. Il est rejeté par le décodeur. Seul un maximum de 7 octets de remplissage est autorisé dans chaque en-tête de paquet.

Son ordre d'octet défini est le suivant  :

Code de démarrage du paquet 4B :

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

octet 0

octet 1

octet 2

octet 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
code de démarrage

1011 1010
Identifiant du PACK

 

Identifiant du PACK -- 0xBA

 

系统时钟基准(Référence de l'horloge du système SCR)的基本部分SCR的扩展部分

tableau>

 

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

octet 4

octet 5

octet 6

octet 7

octet 8

octet 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

 

octet 10

octet 11

octet 12

octet 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

réservé

pack_stuffing_length 

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

Ensuite, jetez un œil à la définition de l'en-tête du système PS (c'est-à-dire en-tête du système PS : titre du système du flux de programme ) partie  : (À partir du document standard MPEG-2)

Tableau 2-34 Titre du système de streaming du programme

Langue

Chiffres

Mnémonique

system_header() {

system_header_start_code

32

bslbf

header_length

16

uimsbf

marqueur_bit

1

bslbf

rate_bound

22

uimsbf

Marker_bit

1

bslbf

audio_bound

6

uimsbf

fixed_flag

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

bits_réservés

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

    }

 

 

}

 

 

 

Définition sémantique de chaque champ dans l'en-tête système :

Champ du code de démarrage de l'en-tête système system_header_start_code

Valeur '0000 0000 0000 0000 A chaîne de bits de 0000 0001 1011 1011' (0x000001BB), indiquant le début de l'en-tête système.

Champ de longueur d'en-tête header_length

Champ de 16 bits. Indique la longueur en octets de l'en-tête système suivant ce champ. Ce champ pourra être étendu dans de futures extensions de cette spécification.

Champ de limite de débit rate_bound

Champ de 22 bits, la valeur n'est pas inférieure à la valeur maximale du champ program_mux_rate codé dans n'importe quel paquet du flux de programme. Ce champ peut être utilisé par le décodeur pour estimer s'il est capable de décoder l'intégralité du flux.

Champ lié audio audio_bound

Champ de 6 bits, la valeur est un entier dans la plage fermée de 0 à 32, et n'est pas inférieure au processus de décodage dans le flux du programme en même temps. Le nombre maximum de flux audio GB/T XXXX.3 et GB/T AAAA.3 actifs. Dans cette section, si le tampon STD n'est pas vide ou si l'unité de présentation est présentée dans le modèle P-STD, le processus de décodage des flux audio GB/T XXXX.3 et GB/T AAAA.3 est actif.

Champ de drapeau fixe fixed_flag

Drapeau 1 bit. Lorsqu'il est réglé sur « 1 », il indique une opération à débit binaire constant ; lorsqu'il est réglé sur « 0 », il indique une opération à débit binaire variable. Pendant le fonctionnement à débit constant, la valeur du champ system_clock_reference dans le flux composite GB/T XXXX.1 doit obéir à la formule linéaire suivante :

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

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

Parmi eux :

c1 est une constante réelle valable pour tout i

c2 est une constante réelle valable pour tout i

i L'index d'octet du dernier bit de tout champ system_clock_reference contenu dans le flux composite GB/T XXXX.1.

CSPS Champ de drapeau CSPS_flag

Champ de 1 bit. Lorsqu'il est défini sur « 1 », le flux de programme est conforme aux restrictions définies en 2.7.9.

Champ d'indicateur de verrouillage audio du système system_audio_lock_flag

Champ de 1 bit. Indique qu'il existe un rapport spécifié entre la fréquence d'échantillonnage audio du décodeur cible du système et system_clock_ Frequency. system_clock_ Frequency est défini en 2.5.2.1 et le taux d'échantillonnage audio est spécifié par GB/T XXXX.3. Si le rapport SCASR entre system_clock_ Frequency et la fréquence d'échantillonnage audio réelle est constant pour toutes les unités de présentation de tous les flux élémentaires audio du flux de programme, et que la fréquence d'échantillonnage standard indiquée dans le flux audio est égale à la valeur du tableau ci-dessous, alors ceci le champ ne peut être que « 1 ».

SCASR=(system_clock_ Frequency) / audio_sample_rate_in_the_P-STD (2-24)

Les symboles X/Y représentent division des nombres réels.

Audio standard Fréquence d'échantillonnage (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

Champ d'indicateur de verrouillage vidéo du système system_video_lock_flag

Champ de 1 bit. Indique qu'il existe un rapport spécifié entre la fréquence d'images vidéo du décodeur cible du système et system_clock_ Frequency. system_clock_ Frequency est défini en 2.5.2.1 et la fréquence d'images vidéo est spécifiée par GB/T XXXX.2. Si le rapport SCFR entre system_clock_ Frequency et la fréquence d'images vidéo réelle est constant pour toutes les unités de présentation de tous les flux élémentaires vidéo en GB/T XXXX.1, et que la fréquence d'images standard indiquée dans le flux vidéo est égale à la valeur du tableau ci-dessous , alors ce champ ne peut être que « 1 ».

SCFRsystem_clock_ Frequency / frame_rate_in_the_P-STD (2-25)

29,97

La valeur du ratio SCFR est précise. Pour des fréquences standard de 23,976, 29,97 ou 59,94 images/seconde, la fréquence d'images réelle diffère légèrement de la fréquence standard.

Champ lié à la vidéo video_bound

Champ de 5 bits, la valeur est un entier dans la plage fermée de 0 à 16 et n'est pas inférieure au processus de décodage dans le flux de programme lorsqu'il est actif Le nombre maximum de flux GB/T XXXX.2 et GB/T AAAA.2. Dans cette section, le processus de décodage des flux vidéo GB/T XXXX.2 et GB/T AAAA.2 est actif si le tampon P-STD n'est pas vide ou si l'unité de présentation est présentée dans le modèle P-STD.

Champ d'indicateur de restriction de débit de paquets packet_rate_restriction_flag

Drapeau 1 bit. Si l'indicateur CSPS est « 1 », ce champ indique laquelle des limites spécifiées en 2.7.9 s'applique au débit de paquets. Si l'indicateur CSPS est « 0 », la signification de ce champ n'est pas définie.

Champ de bits réservés réservés_bits

Champ de 7 bits. Réservé pour une utilisation future par l'ISO/CEI. Sa valeur doit être « 111 1111 », sauf indication contraire de l'ISO/CEI.

Champ d'identification du flux stream_id

Champ de 8 bits. Indique l'encodage et le numéro de flux élémentaire du flux impliqué dans les champs P-STD_buffer_bound_scale et P-STD_buffer_size_bound suivants.

Si la valeur est « 1011 1000 », les champs P-STD_buffer_bound_scale et P-STD_buffer_size_bound suivants font référence à tous les flux audio du flux du programme.

Si la valeur est « 1011 1001 », les champs P-STD_buffer_bound_scale et P-STD_buffer_size_bound suivants font référence à tous les flux vidéo du flux du programme.

Si stream_id prend d'autres valeurs, il doit s'agir d'une valeur d'un octet supérieure ou égale à « 1011 1100 » et doit être interprétée comme l'encodage et le numéro de flux de base du flux conformément au tableau 2-18.

Chaque flux élémentaire d'un flux de programme doit avoir ses P-STD_buffer_bound_scale et P-STD_buffer_size_bound spécifiés exactement une fois dans chaque en-tête système via ce mécanisme.

P-STDChamp d'échelle lié au tampon P-STD_buffer_bound_scale

Champ de 1 bit. Indique le facteur d'échelle utilisé pour interpréter le champ P-STD_buffer_size_bound suivant. Si le stream_id précédent représente un flux audio, la valeur de ce champ est « 0 ». S'il représente un flux vidéo, la valeur de ce champ est '1'. Pour tous les autres types de flux, la valeur de ce champ peut être « 0 » ou « 1 ».

P-STDChamp limite de taille du tampon P-STD_buffer_size_bound

Entier non signé de 13 bits, la valeur n'est pas inférieure au flux n dans le flux de programme La valeur maximale de la taille du tampon P-STD BSn pour tous les paquets. Si la valeur de P-STD_buffer_bound_scale est « 0 », ce champ mesure les limites de la taille du tampon en unités de 128 octets. Si la valeur de P-STD_buffer_bound_scale est « 1 », ce champ mesure les limites de la taille du tampon en unités de 1 024 octets. Donc :

if (P-STD_buffer_bound_scale == 0)

BSnP-STD_buffer_size_bound×128

else

BSnP-STD_buffer_size_bound×1024

Donc, pour l'analyse de l'en-tête système, il suffit généralement de déterminer d'abord s'il existe un en-tête système (selon le code de démarrage de l'en-tête système 0x000001BB), puis de lire la longueur de l'en-tête système, c'est-à-dire la partie PS SYSTEM HEADER LENGTH. Ensuite, en fonction de la longueur de l'en-tête, l'en-tête du système PS est ignoré. Passez à la partie suivante, qui est l'en-tête de mappage de flux du programme PS.

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

Jetez ensuite un œil à la définition de la partie flux de mappage de programme (cartographie de flux de programme) du Flux PS  : (à partir du document standard MPEG-2)

Tableau 2-35 Mappage du flux du programme

Fréquence d'images standard (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

Méthode de langage

Numéro de bit

Mnémonique

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

    réservé

2

bslbf

program_stream_map_version

5

uimsbf

    réservé

7

bslbf

    Marker_bit

1

bslbf

    program_stream_info_length

16

uimsbf

    pour (i=0;i

 

 

        descripteur()

 

 

    }

 

 

    elementary_stream_map_length

16

uimsbf

    pour (i=0;i

 

 

       stream_type

8

uimsbf

       elementary_stream_id

8

uimsbf

       elementary_stream_info_length

16

uimsbf

       pour (i=0;i

 

 

           descripteur()

 

 

        }

 

 

    }

 

 

    CRC_32

32

rpchof

}

 

 

La définition sémantique de chaque champ dans le mappage du flux du programme :

Champ de préfixe du code de démarrage du paquet packet_start_code_prefix

Code 24 bits. Lui et le map_stream_id suivant forment ensemble un code de début de groupe pour marquer le début du groupe. Ce champ est une chaîne de bits avec la valeur '0000 0000 0000 0000 0000 0001' (0x000001).

Champ d'identification du flux cartographique map_stream_id

Champ de 8 bits, la valeur est 0xBC.

Champ de longueur de carte de flux de programme program_stream_map_length

Champ de 16 bits. Indique le nombre d'octets dans program_stream_map immédiatement après ce champ. La valeur maximale de ce champ est 1018 (0x3FA).

Champ indicateur suivant actuel current_next_indicator

Champ de 1 bit. Lorsqu'il est réglé sur « 1 », il indique que le mappage du flux de programme transmis est actuellement disponible. Lorsqu'il est réglé sur « 0 », cela signifie que le mappage du flux de programme transmis n'est pas encore disponible, mais ce sera la prochaine table effective.

Champ de version de la carte de flux de programme program_stream_map_version

Champ de 5 bits, indiquant le numéro de version de l'ensemble de la carte de flux de programme. Chaque fois que la définition de la carte du flux du programme change, ce champ sera incrémenté de 1, modulo 32. Lorsque current_next_indicator est « 1 », ce champ doit être le numéro de version du mappage de flux de programme actuellement applicable ; lorsque current_next_indicator est « 0 », ce champ doit être le numéro de version du prochain mappage de flux de programme applicable.

Champ de longueur des informations du flux de programme program_stream_info_length

Champ de 16 bits, indiquant la longueur totale du descripteur qui suit immédiatement ce champ.

Champ de bit marqueur marqueur_bit

Champ de 1 bit, la valeur est « 1 ».

Champ de longueur de la carte de flux élémentaire elementary_stream_map_length

Champ de 16 bits, indiquant la longueur en octets de toutes les informations de flux élémentaires dans la carte de flux du programme. Il inclut uniquement les champs stream_type, elementaire_stream_id et elementaire_stream_info_length. (Notez ici que la longueur du mappage de flux de base inclut ici uniquement la somme des champs de définition spécifiés plus tard. Autrement dit, à partir de cette longueur, nous pouvons savoir combien de types de définitions de flux il a plus tard. , car la somme des champs de définition d'un flux : stream_type (1BYTE), elementaire_stream_id (1octet) et elementaire_stream_info_length (2octets) est de 4 octets, vous pouvez donc utiliser elementaire_stream_map_length/4 pour obtenir plusieurs informations de type de flux définies plus tard)<.>Champ de type de flux stream_type

Champ de 8 bits, qui spécifie le type de flux selon le tableau 2-29. Ce champ ne peut marquer que le flux élémentaire contenu dans le paquet PES et la valeur ne peut pas être 0x05.

(Ici, nous pouvons temporairement le savoir sur la base de la définition de la norme nationale GB28181

1. Flux vidéo MPEG-4 : 0x10 ;

2. Flux vidéo H.264 : 0x1B;

3. Flux vidéo SVAC : 0x80 ;

4. Flux audio G.711 :

5. 🎜>

6. Flux audio G.723.1 : 0x93 ;

7. Flux audio G.729 :

8. 🎜 >Étant donné que le champ de flux de mappage du programme n'existe que lorsque les images clés sont empaquetées, donc si vous souhaitez déterminer le type d'encodage de flux de l'empaquetage PS, vous pouvez juger en fonction de ce champ

)

En gros. Champ d'identification du flux elementary_stream_id

Champ de 8 bits, indiquant la valeur du champ stream_id dans l'en-tête du groupe PES où se trouve le flux élémentaire.

(Définition de ce champ, 0x(C0~DF) fait référence à l'audio, 0x(E0~EF) fait référence à la vidéo)

Informations de base sur le flux length Champ elmentary_stream_info_length

Champ de 16 bits, indiquant la longueur en octets du descripteur qui suit immédiatement ce champ. ( est la longueur de description du flux de ce type. La longueur spécifiée après ce champ n'est pas dans la classe de plage spécifiée par elementary_stream_map_length.)

CRC 32

field CRC_32

Un champ de 32 bits qui contient la valeur CRC pour produire une valeur de sortie de 0 dans les registres du décodeur définis dans l'annexe A après avoir traité l'intégralité de la carte du flux du programme.

Pour l'analyse de ce champ, nous avons besoin d'une chaîne de bits avec une valeur de 0x000001BC, indiquant le début du mappage du flux du programme pour le moment. . Lisez la longueur de l'en-tête et ignorez-la directement. Oui, si vous devez analyser le type d'encodage du flux, vous devez analyser ce champ en détail.

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

Pack PES

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

Ensuite, analysons le contenu du package PES : package PES=données brutes du code d'en-tête PES ;

Jetons un coup d'œil à l'en-tête PES : (à partir de http://www.php.cn/)

PS流的格式和解析总结

Jetons ensuite un coup d'œil aux étapes d'analyse : (à partir du document standard MPEG-2)

Tableau 2-17 Regroupement PES

Langue

Chiffres

Mnémonique

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 type E stream){

'10'

2

bslbf

PES_scrambling_control

2

bslbf

PES_priorité

1

bslbf

data_alignment_indicator

1

bslbf

copyright

1

bslbf

original_or_copy

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'){

 

 

réservé

 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

truncation_fréquence

 2

bslbf

}

 

 

sinon si ( trick_mode_control = = slow_motion ) {

 

 

rep_cntrl

 5

uimsbf

}

 

 

else if ( trick_mode _control = = freeze_frame ) {

 

 

field_id

 2

uimsbf

réservé

 3

bslbf

}

 

 

sinon si ( trick_mode _control = = fast_reverse ) {

 

 

field_id

 2

bslbf

intra_slice_refresh

 1

bslbf

fréquence_troncation

 2

bslbf

else if ( trick_mode_control = = slow_reverse ) {

 

 

rep_cntrl

 5

uimsbf

}

 

 

autre

 

 

réservé

 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

réservé

 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

marqueur -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

pour(i=0;i< ;PES_extension_field_length;i ){

 

 

réservé

 8

bslbf

}

 

 

}

 

 

}

 

 

pour (i=0;i

 

 

stuffing_byte

 8

bslbf

}

 

 

pour (i=0;i

 

 

PES_packet_data_byte

 8

bslbf

}

 

 

}

 

 

sinon si (stream_id = = program_stream_map

 

 

|| stream_id = = private_stream_2

 

 

|| stream_id = = ECM

 

 

| | stream_id = = EMM

 

 

|| = = program_stream_directory

 

 

|| stream_id = = DSMCC_stream

 

 

|| stream_id = = ITU- T Rec. H.222.1 flux de type E){

 

 

pour (i=0;i

 

 

PES_packet_data_byte

 8

bslbf

}

 

 

}

 

 

sinon si (steam_id = = padding_stream){

 

 

pour (i=0;i

 

 

padding_byte

 8

bslbf

}

 

 

}

 

 

}

 

 

Parmi eux :

Tableau 2-18 Assignation Stream_id

Les paquets PES de type program_stream_map ont une syntaxe unique, qui est spécifiée en 2.5.4.1

stream_id

Remarque

Encodage du flux

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 ou GB/T AAAA.3 numéro de flux audio xxxx (0xC0~0xDF )

1110 xxxx

GB/T XXXX. 2 Ou GB/T AAAA.2 numéro de flux vidéo xxxx (0xE0~0xEF)

1111 0000

3

ECM_stream(0xF0)

1111 0001

3

EMM_stream(0xF1)

1111 0010

5

GB/T XXXX.1 Annexe B ou GB/T XXXX.6_DSMCC_stream(0xF2)

1111 0011

2

ISO/IEC_13522_stream(0xF3)

1111 0100

6

Rec. UIT-T H.222.1 Type A

1111 0101

6

ITU-T Rec. H.222.1 Type B

1111 0110

6

Rec. UIT-T H.222.1 Type C.

1111 0111

6

Rec. H.222.1 Type D

1111 1000

6

UIT-T Rec. 🎜 >

ancillary_stream(0xF9)

1111 1010…1111 1110

Préserver le flux de données

1111 1111

4

program_stream_directory(0xFF)

Le symbole x indique que les valeurs '0' ou '1' sont toutes deux autorisées et peuvent produire la même chose type de flux. Le numéro de flux est déterminé par la valeur de x.
Remarque

1
.

2 paquets PES de type private_stream_1 et ISO/IEC_13352_stream obéissent à la même syntaxe de paquet PES que les flux audio GB/T XXXX.2 et GB/T XXXX.3.

3 paquets PES de type private_stream_2, ECM_stream et EMM_stream sont similaires à private_stream_1, sauf qu'aucune syntaxe n'est spécifiée après le champ PES_packet_length.

4 Les paquets PES de type program_stream_directory ont une syntaxe unique, qui est spécifiée en 2.5.5 .

5 paquets PES de type DSM_CC_stream ont une syntaxe unique, spécifiée dans GB/T XXXX.6.

6 stream_id est associé à stream_type 0x09 dans le tableau 2-29.

7 stream_id est utilisé uniquement pour le regroupement PES. Les paquets PES transportent des données provenant de flux de programme ou de flux de système GB/T AAAA.1 dans le flux de transport (voir 2.4.3.7).

Définition sémantique de chaque champ du paquet PES

Champ de préfixe du code de démarrage du paquet packet_start_code_prefix

Code 24 bits, qui est le de la même manière que le stream_id suivant constitue le code de début du paquet qui identifie le début du paquet. Il s'agit d'une chaîne de bits avec la valeur '0000 0000 0000 0000 0000 0001' (0x000001).

Champ d'identification du flux stream_id

Dans le flux du programme, il précise le numéro et le type du flux de base. Voir le tableau 2-18 pour les définitions. Dans un flux de transport, il peut être fixé à n'importe quelle valeur valide qui décrit correctement le type de flux élémentaire défini dans le Tableau 2-18. Dans les flux de transport, le type de flux élémentaire est spécifié dans les informations spécifiques au programme du § 2.4.4.

PESChamp de longueur de paquet PES_packet_length

Champ de 16 bits, indiquant le nombre d'octets suivant ce champ dans le paquet PES. Une valeur de 0 indique que la longueur du paquet PES est soit non spécifiée, soit illimitée. Ceci n'est autorisé que dans les paquets PES dont la charge utile contient des octets provenant de l'un des flux élémentaires vidéo du paquet Transport Stream.

PESChamp de contrôle de brouillage PES_scrambling_control

Champ de 2 bits, indiquant la méthode de brouillage de la charge utile du paquet PES. Lorsque le brouillage se produit au niveau de la couche PES, l'en-tête du paquet PES, y compris les champs facultatifs s'ils sont présents, ne doit pas être brouillé (voir 2-19).

PESChamp de priorité PES_priority

Champ de 1 bit indiquant la priorité de la charge utile dans le paquet PES. « 1 » indique que la charge utile du paquet PES a une priorité plus élevée que la charge utile du paquet PES, ce champ étant défini sur « 0 ». Le multiplexeur peut utiliser ce champ pour prioriser les données dans les flux élémentaires. Le mécanisme de transport ne doit pas modifier ce champ.

Champ de l'indicateur d'alignement des données data_alignment_indicator

Drapeau 1 bit. Lorsqu'il est défini sur « 1 », cela signifie que l'en-tête du paquet PES est suivi du code de démarrage vidéo ou du mot de synchronisation audio indiqué par le data_alignment_indicator en 2.6.10, s'il existe un descripteur data_alignment_indicator. Si sa valeur est « 1 » et qu'il n'existe pas de descripteur de ce type, l'alignement représenté par le type d'alignement « 01 » dans les Tableaux 2-47 et 2-48 est requis. Lorsque la valeur est « 0 », il n'est pas défini s'il existe un tel alignement.

Champ de copyright copyright

Champ à 1 chiffre. Lorsqu'il est défini sur « 1 », indique que le matériel contenu dans la charge utile du paquet PES associé est protégé par le droit d'auteur. Lorsque la valeur est « 0 », il n'est pas défini si le matériel est protégé par le droit d'auteur. Les descripteurs de copyright décrits au § 2.6.24 sont associés à des flux élémentaires contenant des paquets PES. Si le descripteur est appliqué à du matériel contenant des paquets PES, l'indicateur de droit d'auteur est défini sur « 1 ».

Champ original ou copie original_or_copy

Champ de 1 bit. Lorsqu'il est défini sur « 1 », cela indique que le contenu de la charge utile du paquet PES concerné est original ; une valeur de « 0 » indique que le contenu de la charge utile du paquet PES concerné est une copie.

PTS DTS Champ de drapeau PTS_DTS_flags

Champ de 2 bits. Lorsque la valeur est « 10 », le champ PTS doit apparaître dans l'en-tête du groupe PES ; lorsque la valeur est « 11 », le champ PTS et le champ DTS doivent apparaître dans l'en-tête du groupe PES ; lorsque la valeur est « 00 » ; , le champ PTS Ni les champs ni DTS n'apparaissent dans l'en-tête du paquet PES. La valeur '01' n'est pas autorisée.

ESCRChamp de drapeau ESCR_flag

Drapeau 1 bit. Lorsqu'il est défini sur « 1 », il indique que les champs ESCR de base et étendu apparaissent dans l'en-tête du paquet PES ; une valeur de « 0 » indique qu'il n'y a pas de champ ESCR.

ESChamp d'indicateur de taux ES_rate_flag

Drapeau 1 bit. Lorsqu'il est défini sur « 1 », il indique que le champ ES_rate apparaît dans l'en-tête du paquet PES ; une valeur de « 0 » indique qu'il n'y a pas de champ ES_rate.

DSMChamp d'indicateur du mode Trick DSM_trick_mode_flag

Drapeau 1 bit. Lorsqu'il est défini sur « 1 », cela signifie qu'il existe un champ de mode cascade de 8 bits ; lorsque la valeur est « 0 », cela signifie qu'il n'y a pas de champ de ce type.

Champ de drapeau d'informations supplémentaires sur le droit d'auteur additionnel_copy_info_flag

Drapeau 1 bit. Lorsqu'il est défini sur « 1 », cela signifie qu'il existe un champ d'informations de copie supplémentaire ; lorsque la valeur est « 0 », cela signifie qu'il n'y a pas de tel champ.

PES CRCChamp de drapeau PES_CRC_flag

Drapeau 1 bit. Lorsqu'il est défini sur « 1 », il indique que le champ CRC apparaît dans l'en-tête du paquet PES ; une valeur de « 0 » indique qu'un tel champ n'existe pas.

PESChamp d'indicateur d'extension PES_extension_flag

Drapeau 1 bit. Lorsqu'il est défini sur « 1 », il indique qu'il existe un champ d'extension dans l'en-tête du paquet PES ; une valeur de « 0 » indique qu'un tel champ n'existe pas.

PESChamp de longueur des données d'en-tête PES_header_data_length

Champ de 8 bits. Indique le nombre total d'octets occupés par les champs facultatifs et tous les octets de remplissage contenus dans l'en-tête du paquet PES. Les octets précédant ce champ indiquent si des champs facultatifs sont présents.

Champ de bit marqueur marqueur_bit

Un champ de 1 bit avec une valeur de « 1 ».

Afficher le champ d'horodatage PTS

La relation entre l'heure de présentation et l'heure de décodage est la suivante : PTS est un nombre de 33 bits codé dans trois champs distincts. Il indique l'heure de présentation tpn(k) de la k-ème unité de présentation du flux élémentaire n dans le décodeur cible du système. La valeur de PTS est exprimée en unités de 1/300 de la fréquence d'horloge du système (c'est-à-dire 90 kHz). Le temps d'affichage est calculé par PTS selon l'équation 2-11. Voir 2.7.4 pour les contraintes sur la fréquence de codage des horodatages de présentation.

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

Parmi eux, tpn(k) est l'unité d'affichage P L'heure d'affichage de n(k).

Pour l'audio, s'il y a un PTS dans l'en-tête du groupe PES, il fait référence à la première unité d'accès démarrant dans le groupe PES. S'il y a le premier octet de l'unité d'accès audio dans le paquet PES, alors il y a une unité d'accès audio commençant dans le paquet PES.

Pour la vidéo, s'il y a un PTS dans l'en-tête du paquet PES, il fait référence à l'unité d'accès contenant le premier code de début d'image commençant dans le paquet PES. S'il existe le premier octet du code de début d'image dans le paquet PES, alors il y a un code de début d'image commençant dans le paquet PES.

Pour l'unité de présentation audio (PU), la vidéo PU et l'image B dans la séquence low_delay, le temps de présentation tpn(k) doit être égal à tdn(k) .

Pour les images I et P en non-low_delay, lorsqu'il n'y a pas de discontinuité de décodage entre les unités d'accès (AU) k et k', le temps de présentation tpn(k) doit être égal à l'instant de décodage de la prochaine image I ou image P transmise tdn(k) (voir 2.7.5). S'il y a une discontinuité de décodage ou une terminaison de flux, la différence entre tpn(k) et tdn(k) devrait continuer avec le flux initial sans discontinuité ni terminaison. même.

Remarque 1 : La séquence low_delay est la séquence vidéo avec l'indicateur low_delay défini (voir 6.2.2.3 dans GB/T XXXX.2).

S'il y a un filtrage dans l'audio, le modèle du système suppose que le filtrage ne provoque pas de latence. Par conséquent, les échantillons impliqués dans le PTS lors du codage sont les mêmes que les échantillons impliqués dans le PTS lors du décodage. Pour un codage évolutif, voir 2.7.6.

Décoder le champ d'horodatage DTS

DTS est un nombre de 33 bits codé dans trois champs distincts. Il indique l'instant de décodage tdn(j) de la j-ème unité de présentation du flux élémentaire n dans le décodeur cible du système. La valeur de DTS est en unités de 1/300 de la fréquence d'horloge du système (c'est-à-dire 90 kHz). Le temps de décodage est calculé par DTS selon l'équation 2-12 :

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

Parmi eux, tdn( j) est l'heure de décodage de l'unité d'accès An(j).

Pour la vidéo, s'il y a DTS dans l'en-tête du paquet PES, il fait référence à l'unité d'accès contenant le premier code de début d'image commençant dans le paquet PES. S'il existe le premier octet du code de début d'image dans le groupe PES, le code de début d'image démarre dans le groupe PES.

Pour un encodage évolutif, voir 2.7.6.

ESCR champ ESCR_base, ESCR_extension

Champ de 42 bits, codé en deux parties. La première partie est un champ d'une longueur de 33 bits, et sa valeur ESCR_base(i) est donnée par l'équation 2-14 ; la deuxième partie est un champ d'une longueur de 9 bits, et sa valeur ESCR_ext(i) est donnée. par l'équation 2-15. Le champ ESCR indique le temps attendu pour que l'octet contenant le dernier bit de ESCR_base dans le flux élémentaire arrive à la sortie PES-STD (voir 2.5.2.4).

Spécialement

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

Parmi eux :

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

ESCR _ext(i)=((system_clock_frequence×t(i)) p 1) % 300                              (2-15) Les champs

ESCR et ES_rate (voir la sémantique immédiatement ci-dessous) contiennent des informations de synchronisation liées à la séquence de flux PES. Ces champs doivent satisfaire aux contraintes définies en 2.7.3.

Champ de débit de flux de base ES_rate

Entier non signé de 22 bits. Pour les flux PES, il indique la vitesse à laquelle le décodeur cible du système recevra les paquets PES. Ce champ est valide dans le paquet PES auquel il appartient et dans les paquets PES suivants du même flux PES jusqu'à ce qu'un nouveau champ ES_rate soit rencontré. La valeur de ce champ est en unités de 50 octets/seconde et ne peut pas être 0. Ce champ est utilisé pour définir l'heure à laquelle les octets du flux PES arrivent à l'entrée P-STD (voir définition au 2.5.2.4). La valeur codée dans ce champ peut différer entre les paquets PES.

Champ de contrôle du mode Trick trick_mode_control

Champ de 3 bits. Il représente un mode cascade appliqué au flux vidéo associé. Pour les autres types de flux élémentaires, la signification de ce champ et des cinq bits suivants n'est pas définie. Pour la définition de l'état trick_mode, veuillez vous référer à la section mode trick de 2.4.2.3.

Lorsque le statut trick_mode est faux, pour la vidéo GB/T XXXX.2, le numéro N de chaque image dans la séquence progressive issue du processus de décodage est spécifié par les champs repeat_first_field et top_field_first. Pour les vidéos GB/T AAAA.2, il est déterminé par le titre de la séquence.

Pour les séquences entrelacées, lorsque le statut trick_mode est faux, pour la vidéo GB/T XXXX.2, le nombre de fois N est précisé par les champs repeat_first_field et progressif_frame.

Lorsque le statut trick_mode est vrai, le nombre de fois que l'image est lue dépend de la valeur N.

Tableau 2-20 Valeurs de contrôle du mode Cascade

'001' Ralentissez

描  述

'000'

快进

'001'

慢动作

'010'

冻结帧

'011'

快倒

'100'

慢倒

'101'-'111'

保留

Valeur
Description
'000' Avance rapide
Ralenti
'010' Geler cadre
'011' Recul rapide
'100'
'101 ' -'111' Réservé

Lorsque la valeur de ce champ change ou que le fonctionnement du mode cascade s'arrête, toute combinaison des situations suivantes peut se produire :

l La base de temps est discontinue

l Le décodage est discontinu ; ;

l Le compteur de continuité n'est pas continu

Dans le cas du mode astuce, la vitesse non standard de décodage et de présentation peut faire en sorte que certains champs définis dans les données du flux élémentaire vidéo aient valeurs incorrectes. De même, les contraintes sémantiques sur les structures de fragments peuvent être invalides. Les éléments de syntaxe vidéo impliqués dans ces exceptions sont : v_axis_positive;

l field_sequence;

l subcarrier;

l burst_amplitude;

l subcarrier_phase;

En mode astuce, le décodeur ne doit pas dépendre de l'encodage des valeurs de ces champs.

La norme n'exige pas que le décodeur soit capable de décoder le champ trick_mode_control. Cependant, les décodeurs capables de décoder ce champ doivent répondre aux exigences standard suivantes.

Avance rapide, avance rapide

La valeur '000' dans le champ trick_mode_control. Lorsque cette valeur est présente, elle représente un flux vidéo en avance rapide et définit la signification des 5 bits suivants dans l'en-tête du paquet PES. Le bit intra_slice_refresh peut être mis à « 1 » pour indiquer qu'il peut y avoir des macroblocs manquants. Le décodeur peut remplacer le macrobloc par la même position dans l'image décodée précédente. Le champ field_id défini dans le Tableau 2-21 indique le ou les champs à afficher. Le champ Frequency_troncation indique un ensemble restreint de coefficients pouvant être inclus. La signification de cette valeur de champ est indiquée dans le Tableau 2-22.

Ralenti ralenti

La valeur '001' dans le champ trick_mode_control. Lorsque cette valeur est présente, elle représente un flux vidéo au ralenti et définit la signification des 5 bits suivants dans l'en-tête du paquet PES. Pour les séquences progressives, l'image doit être affichée pendant un temps N×rep_cntrl, où N est défini comme ci-dessus.

Pour la séquence vidéo progressive GB/T AAAA.2 et GB/T XXXX.2, l'image doit être affichée pendant N×rep_cntrl time, où N est défini comme ci-dessus.

Pour les séquences entrelacées GB/T XXXX.2, cet écran doit être affiché pendant le temps N×rep_cntrl. Si l'image est une image encadrée, le premier champ à afficher doit être le champ supérieur lorsque top_field_first vaut 1, et le champ inférieur lorsque top_field_first vaut 0 (voir GB/T XXXX.2). Ce champ est affiché N×rep_cntrl/2 fois. Les autres champs de l'écran sont affichés N-N×rep_cntrl/2 fois.

arrêt sur image arrêt sur image

La valeur '010' dans le champ trick_mode_control. Lorsque cette valeur apparaît, elle représente le flux vidéo d'arrêt sur image et définit la signification des 5 bits suivants dans l'en-tête du paquet PES. Le champ field_id défini dans le Tableau 2-21 indique quel(s) champ(s) doivent être affichés. Le champ field_id indique la première unité d'accès vidéo commençant dans le paquet PES contenant ce champ, à moins que le paquet PES ne contienne 0 octet de charge utile. Dans ce dernier cas, le champ field_id indique l'unité d'accès vidéo précédente la plus récente.

retour rapide

La valeur '011' dans le champ trick_mode_control. Lorsque cette valeur est présente, elle représente un flux vidéo de rembobinage et définit la signification des 5 bits suivants dans l'en-tête du paquet PES. Le bit intra_slice_refresh peut être mis à « 1 » pour indiquer qu'il peut y avoir des macroblocs manquants. Le décodeur peut remplacer le macrobloc par la même position dans l'image décodée précédente. Le champ field_id défini dans le Tableau 2-21 indique le ou les champs à afficher. Le champ Frequency_troncation indique un ensemble restreint de coefficients qui peuvent être inclus. La signification de cette valeur de champ est indiquée dans le Tableau 2-22 « Valeur de sélection du coefficient ».

inversion lente inversion lente

La valeur '100' dans le champ trick_mode_control. Lorsque cette valeur est présente, elle représente un flux vidéo à retour lent et définit la signification des 5 bits suivants dans l'en-tête du paquet PES. Pour les séquences vidéo progressives GB/T AAAA.2 et GB/T XXXX.2, l'image doit être affichée pendant une durée N×rep_cntrl, où N est défini comme ci-dessus.

Pour les séquences entrelacées GB/T XXXX.2, cet écran doit être affiché pendant le temps N×rep_cntrl. Si l'image est une image encadrée, le premier champ à afficher doit être le champ du bas lorsque top_field_first est 1, et le champ du haut lorsque top_field_first est '0' (voir GB/T XXXX.2). Ce champ est affiché N×rep_cntrl/2 fois. Les autres champs de l'écran sont affichés N-N×rep_cntrl/2 fois.

Champ d'identification du champ field_id

Champ à 2 chiffres, indiquant quel(s) champ(s) doivent être affichés. Codez-le selon le tableau 2-21.

Tableau 2-21 valeur de contrôle du champ field_id

'01'

描  述

'00'

仅自顶向下播放

'01'

仅自底向上播放

'10'

播放所有帧

'11'

保留

valeur

Description
'00'

Jouer de haut en bas uniquement

Jouer de bas en haut uniquement

td>

'10'

Lire toutes les images

描述

'00'

仅DC系数非0

'01'

仅前三个系数非0

'10'

仅前六个系数非0

'11'

所有系数均可能非0

'11' Réservé
Champ de référence intra-tranche intra_slice_refresh 1 bit. Lorsqu'il est défini sur « 1 », il indique qu'il peut y avoir des macroblocs manquants dans la tranche codée de données vidéo dans le paquet PES ; lorsqu'il est défini sur « 0 », il indique que la situation ci-dessus peut ne pas se produire. Pour plus d'informations, voir GB/T XXXX.2. Le décodeur peut remplacer le macrobloc perdu par un macrobloc situé à la même position dans l'image décodée précédente. Champ de troncature de fréquence Frequency_truncationChamp de 2 bits. Souligne qu'un ensemble restreint de coefficients peut être utilisé lors du codage des données dans les paquets PES. Sa valeur est définie dans le Tableau 2-22. Tableau 2-22 Valeurs de sélection des coefficients tableau>

Champ de contrôle du nombre d'affichages rep_cntrl

Champ à 5 chiffres, indiquant le nombre d'affichages de chaque champ dans l'écran entrelacé ou le nombre d'affichages d'écran progressifs. Pour les images entrelacées, le fait que le champ supérieur ou le champ inférieur soit affiché en premier dépend du champ trick_mode_control et du champ top_field_first dans l'en-tête de la séquence vidéo. La valeur de ce champ ne peut pas être « 0 ».

Champ d'informations supplémentaires sur le droit d'auteur additionnel_copy_info

Champ de 7 bits, contenant des données spéciales liées aux informations sur le droit d'auteur.

PES précédentPacket CRCchamp previous_PES_packet_CRC

Champ 16 bits. Ce champ contient une valeur CRC qui génère une sortie 0 dans les 16 registres du décodeur après avoir traité le paquet PES précédent (à l'exclusion de l'en-tête de ce paquet PES). Cette valeur CRC est similaire à celle définie à l'annexe A, mais avec le polynôme suivant : 🎜>

Remarque 2 : Cette valeur CRC est destinée à la maintenance du réseau, comme l'isolement des sources d'erreurs intermittentes, et n'est pas destinée à être utilisée par le décodeur de flux élémentaire. Il n'est utilisé que pour compter les octets de données puisque les données d'en-tête du paquet PES peuvent être modifiées pendant la transmission.

PESChamp d'indicateur de données privées PES_private_data_flag

Drapeau 1 bit. Lorsqu'il est défini sur « 1 », cela signifie que l'en-tête du paquet PES contient des données spéciales ; lorsqu'il est défini sur « 0 », cela signifie qu'il n'y a pas de données spéciales dans l'en-tête du paquet PES.

Pack header field flag field pack_header_field_flag Drapeau 1 bit. Lorsqu'il est défini sur « 1 », cela signifie que l'en-tête du paquet PES contient un en-tête de paquet GB/T AAAA.2 ou un en-tête de paquet de flux de programme. Si ce champ se trouve dans un paquet PES contenu dans un flux de programme, sa valeur doit être « 0 ». Dans un flux de transport, une valeur « 0 » indique qu'il n'y a pas d'en-tête de paquet dans l'en-tête PES.

Champ d'indicateur du nombre de séquences de paquets du programme program_packet_sequence_counter_flag

Drapeau 1 bit. Une valeur de « 1 » indique que le paquet PES possède les champs program_packet_sequence_counter, MPEG1_MPEG2_identifier et original_stuff_length. Une valeur de « 0 » indique que ces champs ne sont pas inclus dans l'en-tête du paquet PES.

P-STD

Champ d'indicateur de tampon P-STD_buffer_flag

Drapeau 1 bit. Lorsqu'il est défini sur « 1 », il indique qu'il existe des champs P-STD_buffer_scale et P-STD_buffer_size dans l'en-tête du paquet PES. Une valeur de « 0 » indique que ces champs ne sont pas inclus dans l'en-tête PES.

PESChamp d'indicateur d'extension PES_extension_flag_2

Drapeau 1 bit, lorsqu'il est défini sur '1', il indique qu'il existe PES_extension_field_length et les champs associés .

PESChamp de données privées PES_private_data

Champ de 16 bits. Contient des données privées. Lorsque ces données sont combinées avec les champs avant et après elles, elles ne peuvent pas entrer en conflit avec packet_start_code_prefix (0x000001).

Champ de longueur du champ Pack pack_field_length Champ de 8 bits. Représente la longueur de pack_header_field() en octets.

Champ de nombre de séquences de paquets du programme program_packet_sequence_counter

Champ de 7 bits. Il s'agit d'un compteur facultatif qui est incrémenté avec chaque paquet PES suivant provenant d'un flux de programme ou d'un flux GB/T AAAA.1 ou d'un paquet PES avec une seule définition de programme dans un flux de transport pour assurer la cohérence avec le compteur de continuité (voir 2.4.3.2). pour une fonctionnalité similaire. Il peut être utilisé pour récupérer la séquence initiale des paquets PES dans le flux du programme ou dans le flux GB/T AAAA.1 d'origine. Ce compteur revient à 0 après avoir atteint sa valeur maximale. Les groupes PES ne peuvent pas être répétés. Par conséquent, deux paquets PES consécutifs dans un programme composite ne doivent pas avoir la même valeur program_packet_sequence_counter.

MPEG1 MPEG2

Champ d'identifiant MPEG1_MPEG2_identifier

Drapeau 1 bit. Lorsqu'il est défini sur « 1 », il indique que les informations transportées par le paquet PES proviennent du flux GB/T AAAA.1 ; lorsqu'il est défini sur « 0 », il indique que les informations transportées par le paquet PES proviennent du flux programme ; .

Initial

Champ de longueur de remplissage d'origine original_stuff_length

Champ de 6 bits. Spécifie le nombre d’octets de remplissage utilisés dans l’en-tête de paquet GB/T XXXX.1 initial ou dans l’en-tête de paquet GB/T AAAA.1 initial.

P-STDChamp d'échelle de tampon P-STD_ buffer_scale

Champ de 1 bit. Cela n'a de sens que si le paquet PES est inclus dans le flux du programme. Il indique le facteur d'échelle utilisé pour interpréter les champs P-STD_buffer_size suivants. Si le stream_id précédent représente un flux audio, la valeur de ce champ doit être « 0 » ; si le stream_id précédent représente un flux vidéo, la valeur de ce champ doit être « 1 ». Pour tous les autres types de flux, la valeur peut être « 0 » ou « 1 ».

P-STDChamp de taille du tampon P-STD_buffer_size

Entier non signé de 13 bits. Cela n'a de sens que si le paquet PES est inclus dans le flux du programme. Il définit la taille du tampon d'entrée P-STD BSn. Si la valeur de P-STD_buffer_scale est « 0 », alors P-STD_buffer_size mesure la taille du tampon en unités de 128 octets. Si la valeur de P-STD_buffer_scale est « 1 », alors P-STD_buffer_size mesure la taille du tampon en unités de 1 024 octets. Donc :

if ( P-STD_buffer_scale == 0)

BSn=P-STD_buffer_size ×128                                                                                                                                             

P-STD_buffer_size

×1024                                                      2-17)Lorsque ce champ est reçu par le décodeur cible du système GB/T XXXX.1, sa valeur de codage prend effet immédiatement. PES

Champ de longueur du champ d'extension PES_extension_field_length

Champ de 7 bits. Spécifie la longueur en octets des données suivant ce champ dans le champ d'extension PES jusqu'aux octets réservés inclus. Champ d'octet de remplissage stuffing_byte

Champ de 8 bits avec une valeur constante de '1111 1111'. Peut être inséré par l'encodeur pour répondre aux besoins du canal, etc. Le décodeur rejette ce champ. Seuls 32 octets de remplissage peuvent apparaître dans un en-tête de paquet PES.

PES

Champ d'octet de données du paquet PES_packet_data_byte

Ce champ doit être consécutif au flux élémentaire spécifié par le stream_id ou les octets de données PID du paquet. Lorsque les données de flux élémentaires sont conformes à GB/T XXXX.2 ou GB/T XXXX.3, ce champ doit être constitué d'octets alignés sur les octets de cette norme. Le caractère boutiste des flux élémentaires doit être maintenu. Le nombre d'octets dans ce champ, N, est spécifié par le champ PES_packet_length. N doit être égal à PES_packet_length moins le nombre d'octets entre le dernier octet du champ PES_packet_length et le premier PES_packet_data_byte. Champ d'octet de remplissage padding_byte

Champ de 8 bits, sa valeur est constante '1111 1111'. Ce champ est rejeté par le décodeur.

Pour plus de formats de flux PS et de résumé d'analyse, veuillez faire attention au site Web PHP chinois pour les articles connexes !

Valeur Description
'00' Seul le coefficient DC est non-0
'01' Uniquement les trois premiers les coefficients sont non nuls
'10' Seuls les six premiers coefficients sont non-0
'11' Tous les coefficients peuvent être non nuls
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn