Ratio SCFR values are precise. For standard rates of 23.976, 29.97, or 59.94 frames/second, the actual frame rate differs slightly from the standard rate.
Video bound field video_bound
5-bit field, the value is an integer in the closed interval from 0 to 16 and is not less than the decoding process in the program stream while active The maximum number of GB/T XXXX.2 and GB/T AAAA.2 streams. In this section, the decoding process of GB/T XXXX.2 and GB/T AAAA.2 video streams is active if the P-STD buffer is not empty or the presentation unit is being presented in the P-STD model.
Packet rate limit flag field packet_rate_restriction_flag
1 bit flag. If the CSPS flag is '1', this field indicates which of the limits specified in 2.7.9 applies to the packet rate. If the CSPS flag is '0', the meaning of this field is undefined.
Reserved bit field reserved_bits
7-bit field. Reserved for future use by ISO/IEC. Its value shall be '111 1111' unless ISO/IEC specifies otherwise.
Stream identification field stream_id
8-bit field. Indicates the encoding and elementary stream number of the stream involved in the subsequent P-STD_buffer_bound_scale and P-STD_buffer_size_bound fields.
If the value is '1011 1000', the subsequent P-STD_buffer_bound_scale and P-STD_buffer_size_bound fields refer to all audio streams in the program stream.
If the value is '1011 1001', the subsequent P-STD_buffer_bound_scale and P-STD_buffer_size_bound fields refer to all video streams in the program stream.
If stream_id takes other values, it should be a one-byte value greater than or equal to '1011 1100' and should be interpreted as the encoding and basic stream number of the stream according to Table 2-18.
Each elementary stream in a program stream shall have its P-STD_buffer_bound_scale and P-STD_buffer_size_bound specified exactly once in each system header through this mechanism.
P-STDBuffer bound scale field P-STD_buffer_bound_scale
1-bit field. Represents the scaling factor used to interpret the subsequent P-STD_buffer_size_bound field. If the previous stream_id represents an audio stream, the value of this field is '0'. If it represents a video stream, the value of this field is '1'. For all other stream types, this field value can be '0' or '1'.
P-STDBuffer size limit field P-STD_buffer_size_bound
13-bit unsigned integer, the value is not less than stream n in the program stream The maximum value of the P-STD buffer size BSn for all packets. If the value of P-STD_buffer_bound_scale is '0', this field measures the bounds of the buffer size in units of 128 bytes. If the value of P-STD_buffer_bound_scale is '1', this field measures the bounds of the buffer size in units of 1024 bytes. Therefore:
if (P-STD_buffer_bound_scale == 0)
BSn≤P-STD_buffer_size_bound×128
else
BSn≤P-STD_buffer_size_bound×1024
So for the analysis of the system header, we generally only need to first determine whether there is a system header (according to the start code of the system header 0x000001BB), and then we read the header length of the system header, that is, the PS SYSTEM HEADER LENGTH part. Then based on the length of the header, the PS system header is skipped. Go to the next part, which is the PS program stream mapping header.
============================================ =================
Let’s take a look at the program mapping stream part (program stream mapping) definition of PS stream : (from MPEG- 2 Standard document)
Table 2-35 Program stream mapping
## Language French
|
bit Number
|
Mnemonic
|
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 |
reserved |
2 |
bslbf |
program_stream_map_version |
5 |
uimsbf |
reserved |
7 |
bslbf |
marker_bit |
1 |
bslbf |
program_stream_info_length |
16 |
uimsbf |
for (i=0;i |
|
|
descriptor() |
|
|
} |
|
|
elementary_stream_map_length |
16 |
uimsbf |
for (i=0;i |
|
|
stream_type |
8 |
uimsbf |
elementary_stream_id |
8 |
uimsbf |
elementary_stream_info_length |
16 |
uimsbf |
for (i=0;i |
|
|
descriptor() |
|
|
} |
|
|
} |
|
|
CRC_32 |
32 |
rpchof |
} |
|
|
The semantic definition of each field in the program stream mapping:
Packet start code prefix field packet_start_code_prefix
24-bit code. It and the following map_stream_id together form a group start code to mark the start of the group. This field is a bit string with the value '0000 0000 0000 0000 0000 0001' (0x000001).
Map stream identification field map_stream_id
8-bit field, the value is 0xBC.
Program stream mapping length field program_stream_map_length
16-bit field. Indicates the number of bytes in program_stream_map immediately following this field. The maximum value of this field is 1018 (0x3FA).
Current next indicator field current_next_indicator
1-bit field. When set to '1', it indicates that the transmitted program stream mapping is currently available. When set to '0', it means that the transmitted program stream mapping is not yet available, but it will be the next effective table.
Program stream mapping version field program_stream_map_version
5-bit field, indicating the version number of the entire program stream mapping. Whenever the definition of the program stream map changes, this field will be incremented by 1, modulo 32. When current_next_indicator is '1', this field should be the version number of the currently applicable program stream mapping; when current_next_indicator is '0', this field should be the version number of the next applicable program stream mapping.
Program stream information length field program_stream_info_length
16-bit field, indicating the total length of the descriptor immediately following this field.
Marker bit field marker_bit
1-bit field, the value is '1'.
Elementary stream map length field elementary_stream_map_length
16-bit field, indicating the byte length of all elementary stream information in the program stream map. It only includes the stream_type, elementary_stream_id and elementary_stream_info_length fields. (Note here that the length of the basic stream mapping here only includes the sum of the definition fields specified later. That is, from this length, we can know how many types of stream definitions it has later. , because the sum of the definition fields of a stream: stream_type (1BYTE), elementary_stream_id (1byte) and elementary_stream_info_length (2byte) is 4 bytes, so you can use elementary_stream_map_length/4 to get several stream type information defined later)#.
##Stream type field stream_type 8-bit field specifies the type of stream according to Table 2-29. This field can only mark the elementary stream contained in the PES packet and the value cannot be 0x05. (Here we can temporarily know based on the definition in the national standard GB281811. MPEG-4 video stream: 0x10; 2. H.264 video stream: 0x1B; 3. SVAC video stream: 0x80; 4. G.711 audio stream: 0x90; 5. G.722.1 audio stream: 0x92; 6, G.723.1 audio stream: 0x93; 7, G.729 audio stream: 0x99; 8, SVAC audio stream: 0x9B. #Because the program mapping stream field will only exist when key frames are packaged, so if you want to determine the stream encoding type of PS packaging, use this field to determine )
Basically. Stream identification field elementary_stream_id
8-bit field, indicating the value of the stream_id field in the PES packet header of the PES packet where the elementary stream is located. (Definition of this field, 0x(C0~DF) refers to audio, 0x(E0~EF) refers to video)
Basic stream information length Field elmentary_stream_info_length
16-bit field, indicating the byte length of the descriptor immediately following this field. (That is, the length of the stream description of this type. The specified length behind this field is not in the range specified by elementary_stream_map_length.)
CRC 32 Field CRC_32 32-bit field that contains the CRC value to produce an output value of 0 in the decoder register defined in Appendix A after processing of the entire program stream map.
For the analysis of this field, we need a bit string with a value of 0x000001BC, indicating the beginning of the program stream mapping. There is no need to process it for the time being. Read the Header Length and skip it directly. Yes, if you need to parse the stream encoding type, you must parse this field in detail.
==================PES PACK ================ =============
Next, let’s analyze the contents of the PES package: PES package=PES header+code raw data;
Let’s take a look firstPES header:(from http://www.php.cn/)
Then let’s take a look at the parsing steps: (from MPEG-2 standard document)
Table 2-17 PES grouping
语法 |
digit |
Mnemonic |
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_priority
## 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'){ |
|
|
reserved |
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 |
frequency_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 |
reserved |
3 |
bslbf |
} |
|
|
else if ( trick_mode _control = = fast_reverse ) { |
|
|
field_id |
2 |
bslbf |
intra_slice_refresh |
1 |
bslbf |
frequency_truncation |
2 |
bslbf |
else if ( trick_mode_control = = slow_reverse ) { |
|
|
rep_cntrl |
5 |
uimsbf |
} |
|
|
else |
|
|
reserved |
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 |
reserved |
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 |
|
|
reserved |
8 |
bslbf |
} |
|
|
} |
|
|
} |
|
|
for (i=0;i |
|
|
stuffing_byte |
8 |
bslbf |
} |
|
|
for (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 |
|
|
|| stream_id = = program_stream_directory |
|
|
|| stream_id = = DSMCC_stream |
|
|
|| stream_id = = ITU-T Rec. H.222.1 type 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 |
} |
|
|
} |
|
|
} |
|
|
Among them:
Table 2-18 Stream_id assignment
stream_id |
Note |
Stream encoding |
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 or GB/T AAAA.3 audio stream number xxxx( 0xC0~0xDF ) |
1110 xxxx |
|
GB/T XXXX.2 Or GB/T AAAA.2 video stream number xxxx( 0xE0~0xEF ) |
1111 0000 |
3
|
ECM_stream(0xF0)
|
1111 0001 |
3
|
EMM_stream(0xF1)
|
1111 0010 |
5
| ##GB/T XXXX.1 Appendix B or GB/T XXXX.6_DSMCC_stream(0xF2) |
1111 0011 |
2 | ISO/IEC_13522_stream(0xF3) |
1111 0100 |
6 | ITU-T Rec. H.222.1 Type A | 1111 0101 |
6
##ITU-T Rec. H.222.1 Type B |
|
1111 0110
|
#6
ITU-T Rec. H.222.1 Type C |
|
1111 0111
|
6
ITU-T Rec. H.222.1 Type D |
|
1111 1000
|
6
ITU-T Rec. H.222.1 Type E |
|
1111 1001
|
7
ancillary_stream (0xF9) |
| ##1111 1010…1111 1110 |
Retain data stream |
##1111 1111 |
4 |
program_stream_directory( 0xFF)
|
The symbol x indicates that the value '0' or '1' is both allowed and can produce the same stream type. The stream number is determined by the value of x. |
Note1 | The PES packet of type program_stream_map has a unique syntax, which is specified in 2.5.4.1 .
2 PES packets of type private_stream_1 and ISO/IEC_13352_stream obey the same PES packet syntax as GB/T XXXX.2 and GB/T XXXX.3 audio streams.
3 PES packets of type private_stream_2, ECM_stream and EMM_stream are similar to private_stream_1, except that the syntax is not specified after the PES_packet_length field.
4 The PES grouping of type program_stream_directory has a unique syntax, which is specified in 2.5.5.
5 PES packets of type DSM_CC_stream have a unique syntax, which is specified in GB/T XXXX.6.
6 stream_id is associated with stream_type 0x09 in Table 2-29.
7 stream_id is only used for PES grouping. PES packets carry data originating from program streams or GB/T AAAA.1 system streams in the transport stream (see 2.4.3.7).
Semantic definition of each field in the PES packet
Packet start code prefix field packet_start_code_prefix
24-bit code, it and the following stream_id constitutes the packet start code that identifies the start of the packet. It is a bit string with the value '0000 0000 0000 0000 0000 0001' (0x000001).
Stream identification field stream_id
In the program stream, it specifies the number and type of the basic stream. See Table 2-18 for definitions. In a transport stream, it may be set to any valid value that correctly describes the elementary stream type defined in Table 2-18. In transport streams, the elementary stream type is specified in the program-specific information of 2.4.4.
PESPacket length field PES_packet_length
16-bit field, indicating the number of bytes following this field in the PES packet. A value of 0 indicates that the PES packet length is either unspecified or unlimited. This is only allowed in PES packets whose payload contains bytes originating from one of the video elementary streams in the Transport Stream packet.
PES Scrambling control field PES_scrambling_control
2-bit field, indicating the scrambling method of the PES packet payload. When scrambling occurs at the PES layer, the PES packet header, including optional fields if present, shall not be scrambled (see 2-19).
PESPriority field PES_priority
1-bit field indicating the priority of the payload in the PES packet. '1' indicates that the payload in the PES packet has a higher priority than the payload of the PES packet with this field set to '0'. The multiplexer can use this field to prioritize data in the elementary streams. The transport mechanism should not modify this field.
Data alignment indicator field data_alignment_indicator
1 bit flag. When set to '1', it means that the PES packet header is followed by the video start code or audio synchronization word pointed out by the data_alignment_indicator in 2.6.10, if there is a data_alignment_indicator descriptor. If its value is '1' and there is no such descriptor, the alignment represented by alignment_type '01' in Tables 2-47 and 2-48 is required. When the value is '0', it is not defined whether there is any such alignment.
Copyright field copyright
1-digit field. When set to '1', indicates that the material in the associated PES packet payload is copyright protected. When the value is '0', it is not defined whether the material is copyright protected. The copyright descriptors described in 2.6.24 are associated with elementary streams containing PES packets. If the descriptor is applied to material containing PES packets, the copyright flag is set to '1'.
Original or copy field original_or_copy
1-bit field. When set to '1', it indicates that the contents of the relevant PES packet payload are original; a value of '0' indicates that the contents of the relevant PES packet payload are a copy.
PTS DTSFlag field PTS_DTS_flags
2-bit field. When the value is '10', the PTS field should appear in the PES group header; when the value is '11', both the PTS field and the DTS field should appear in the PES group header; when the value is '00', the PTS field Neither the nor DTS fields appear in the PES packet header. The value '01' is not allowed.
ESCRFlag field ESCR_flag
1-bit flag. When set to '1', it indicates that the ESCR basic and extended fields appear in the PES packet header; a value of '0' indicates that there is no ESCR field.
ESRate flag field ES_rate_flag
1 bit flag. When set to '1', it indicates that the ES_rate field appears in the PES packet header; a value of '0' indicates that there is no ES_rate field.
DSMTrick mode flag field DSM_trick_mode_flag
1 bit flag. When set to '1', it means there is an 8-bit stunt mode field; when the value is '0', it means there is no such field.
Additional copyright information flag field additional_copy_info_flag
1 bit flag. When set to '1', it means there is an additional copy information field; when the value is '0', it means there is no such field.
PES CRCFlag field PES_CRC_flag
1 bit flag. When set to '1', it indicates that the CRC field appears in the PES packet header; a value of '0' indicates that there is no such field.
PESExtension flag field PES_extension_flag
1 bit flag. When set to '1', it indicates that there is an extended field in the PES packet header; a value of '0' indicates that there is no such field.
PESHeader data length field PES_header_data_length
8-bit field. Indicates the total number of bytes occupied by optional fields and any padding bytes contained in the PES packet header. The bytes preceding this field indicate whether optional fields are present.
Marker bit field marker_bit
A 1-bit field with a value of '1'.
Show timestamp field PTS
The relationship between presentation time and decoding time is as follows: PTS is a 33-bit number encoded in three separate fields. It indicates the presentation time tpn(k) of the k-th presentation unit of elementary stream n in the system target decoder. The value of PTS is in units of 1/300 of the system clock frequency (i.e. 90 kHz). The display time is calculated by PTS according to Equation 2-11. See 2.7.4 for constraints on the frequency of encoding presentation timestamps.
PTS(k)=((system_clock_frequency×tpn(k)) p 300) % 233 (2-11)
Among them, tpn(k) is the display unit P The display time of n(k).
For audio, if there is a PTS in the PES group header, it refers to the first access unit starting in the PES group. If there is the first byte of the audio access unit in the PES packet, then there is an audio access unit starting in the PES packet.
For video, if there is a PTS in the PES group header, it refers to the access unit containing the first picture start code starting in the PES group. If there is the first byte of the picture start code in the PES packet, then there is a picture start code starting in the PES packet.
For the audio presentation unit (PU), video PU and B picture in the low_delay sequence, the presentation time tpn(k) should be equal to tdn(k) .
For I pictures and P pictures in non-low_delay, when there is no decoding discontinuity between access units (AU) k and k', the presentation time tpn(k) should be Equal to the decoding time tdn(k) of the next transmitted I picture or P picture (see 2.7.5). If there is a decoding discontinuity or stream termination, the difference between tpn(k) and tdn(k) shall continue with the initial stream without discontinuity or termination. are exactly the same.
Note 1: The low_delay sequence is the video sequence with the low_delay flag set (see 6.2.2.3 in GB/T XXXX.2).
If there is filtering in the audio, the system model assumes that filtering does not cause delay. Therefore, the samples involved in the PTS during encoding are the same as the samples involved in the PTS during decoding. For scalable encoding, see 2.7.6.
Decode Timestamp Field DTS
DTS is a 33-bit number encoded in three separate fields. It indicates the decoding time tdn(j) of the j-th presentation unit of elementary stream n in the system target decoder. The value of DTS is in units of 1/300 of the system clock frequency (i.e. 90 kHz). The decoding time is calculated by DTS according to Equation 2-12:
DTS(j)=((system_clock_frequency×tdn (j)) p 300) % 233 (2-12)
Among them, tdn(j) is the storage Take the decoding time of unit An(j).
For video, if there is DTS in the PES packet header, it refers to the access unit containing the first picture start code starting in the PES packet. If there is the first byte of the picture start code in the PES group, the picture start code starts in the PES group.
For scalable encoding, see 2.7.6.
ESCR Field ESCR_base, ESCR_extension
42-bit field, encoded in two parts. The first part is a field with a length of 33 bits, and its value ESCR_base(i) is given by Equation 2-14; the second part is a field with a length of 9 bits, and its value ESCR_ext(i) is given by Equation 2-15 . The ESCR field indicates the expected time for the byte containing the last bit of ESCR_base in the elementary stream to arrive at the PES-STD output (see 2.5.2.4).
Specially
ESCR(i)=ESCR_base(i)×300+ escr_ext ( i ) (2-13)
Where:
# Escr_base ( i ) =((system_clock_frequency×t(i)) p 300) % 233 #ESCR _ext(i)=((system_clock_frequency×t(i)) p 1) % 300 (2-15)The ESCR and ES_rate fields (see semantics immediately below) contain timing information related to the PES stream sequence. These fields shall satisfy the constraints defined in 2.7.3.
Basic stream rate field ES_rate 22-bit unsigned integer. For PES streams, it indicates the rate at which the system's target decoder will receive PES packets. This field is valid in the PES packet to which it belongs and in subsequent PES packets of the same PES stream until a new ES_rate field is encountered. The value of this field is in units of 50 bytes/second and cannot be 0. This field is used to define the time when bytes of the PES stream arrive at the P-STD input (see definition in 2.5.2.4). The value encoded in this field may differ between PES packets.
Trick mode control field trick_mode_control 3-digit field. It represents a stunt mode that is applied to the associated video stream. For other types of elementary streams, the meaning of this field and the following five bits is not defined. For the definition of trick_mode state, please refer to the trick mode section of 2.4.2.3.
When the trick_mode status is false, for GB/T XXXX.2 video, the number N of each frame in the progressive sequence output by the decoding process is specified by the repeat_first_field and top_field_first fields. For GB/T AAAA.2 videos, it is determined by the sequence title.
For interlaced sequences, when the trick_mode status is false, for GB/T XXXX.2 video, the number of times N is specified by the repeat_first_field and progressive_frame fields.
When the trick_mode status is true, the number of times the picture is played depends on the value N.
Table 2-20 Stunt mode control values
Value |
Description |
'000' |
Fast forward |
'001' |
SLOW MOTION |
##'010'
|
Freeze Frame
|
'011'
|
Fast Rewind
|
'100'
| ## Slow down |
##'101'-'111'
reserve |
|
When the value of this field changes or the stunt mode operation is stopped, any combination of the following situations may occur:
l The time base is discontinuous;
l #l The continuity counter is discontinuous;
In the case of trick mode, the non-standard speed of decoding and presentation may cause some field values defined in the video elementary stream data to be incorrect. Likewise, semantic constraints on fragment structures may be invalid. The video syntax elements involved in these exceptions are:
l bit_rate;
l vbv_delay; ## l field_sequence;
L Subcarrier; ## L burst_amplitude; ## L Subcarrier_PHASE; ## In the stunt mode, the decoder should not depend on the coding The values in these fields. The standard does not require the decoder to be able to decode the trick_mode_control field. However, decoders capable of decoding this field shall meet the following standard requirements.
fast forward fast forword The value '000' in the trick_mode_control field. When this value is present, it represents a fast-forward video stream and defines the meaning of the following 5 bits in the PES packet header. The intra_slice_refresh bit may be set to '1' to indicate that there may be missing macroblocks. The decoder can replace the macroblock with the same position in the previous decoded picture. The field_id field defined in Table 2-21 indicates which field or fields should be displayed. The frequency_truncation field indicates a restricted set of coefficients that may be included. The meaning of this field value is shown in Table 2-22.
Slow motion slow motion The value '001' in the trick_mode_control field. When this value is present, it represents a slow-motion video stream and defines the meaning of the following 5 bits in the PES packet header. For progressive sequences, the picture should be displayed for N×rep_cntrl time, where N is defined as above. For GB/T AAAA.2 video and GB/T XXXX.2 video progressive sequence, the picture should be displayed for N×rep_cntrl time, where N is defined as above. For GB/T XXXX.2 interlaced sequences, this screen should be displayed for N×rep_cntrl time. If the picture is a frame picture, the first field to be displayed should be the top field when top_field_first is 1, and the bottom field when top_field_first is 0 (see GB/T XXXX.2). This field is displayed N×rep_cntrl/2 times. The other fields of the screen are displayed for N-N×rep_cntrl/2 times. Freeze frame freeze frame The value '010' in the trick_mode_control field. When this value appears, it represents the freeze frame video stream and defines the meaning of the following 5 bits in the PES packet header. The field_id field defined in Table 2-21 indicates which field(s) should be displayed. The field_id field indicates the first video access unit starting in the PES packet containing this field, unless the PES packet contains 0 payload bytes. In the latter case, the field_id field indicates the most recent previous video access unit.
fast reverse fast reverse The value '011' in the trick_mode_control field. When this value is present, it represents a rewind video stream and defines the meaning of the following 5 bits in the PES packet header. The intra_slice_refresh bit may be set to '1' to indicate that there may be missing macroblocks. The decoder can replace the macroblock with the same position in the previous decoded picture. The field_id field defined in Table 2-21 indicates which field or fields should be displayed. The frequency_truncation field indicates a restricted set of coefficients that may be included. The meaning of this field value is shown in Table 2-22 "Coefficient Selection Value".
Slow reverse slow reverse The value '100' in the trick_mode_control field. When this value is present, it represents a slow-reverse video stream and defines the meaning of the following 5 bits in the PES packet header. For GB/T AAAA.2 video and GB/T XXXX.2 video progressive sequence, the picture should be displayed for N×rep_cntrl time, where N is defined as above. For GB/T XXXX.2 interlaced sequences, this screen should be displayed for N×rep_cntrl time. If the picture is a frame picture, the first field to be displayed should be the bottom field when top_field_first is 1, and the top field when top_field_first is '0' (see GB/T XXXX.2). This field is displayed for N×rep_cntrl/2 times. The other fields of the screen are displayed for N-N×rep_cntrl/2 times.
Field identification field field_id 2-bit field, indicating which field(s) should be displayed. Code it according to Table 2-21.
Table 2-21 field_id field control value
Value |
Description |
'00' |
Play from top to bottom only |
'01' |
Play bottom-up only |
'10' |
Play all frames |
##'11'
|
Reserved
|
Intra-slice reference field intra_slice_refresh 1 bit flag. When set to '1', it indicates that there may be missing macroblocks in the encoded piece of video data of the PES packet; when set to '0', it indicates that the above situation may not occur. For more information, see GB/T XXXX.2. The decoder can replace the lost macroblock with a macroblock at the same position in the previous decoded picture.
Frequency truncation field frequency_truncation 2-bit field. Points out that a restricted set of coefficients may be used when encoding data in PES packets. Its value is defined in Table 2-22. Table 2-22 Coefficient selection value
Value
|
Description
|
'00'
|
Only the DC coefficient is non-0
|
'01'
|
Only the first three coefficients are non-0
|
'10' |
Only the first six coefficients are non-0
|
'11'
|
All coefficients are possible Not 0
|
Display times control field rep_cntrl
5-digit field, indicating the number of times each field is displayed in the interlaced screen or the number of times the progressive screen is displayed. For interlaced pictures, whether the top field or the bottom field should be displayed first is a function of the trick_mode_control field and the top_field_first field in the video sequence header. This field value cannot be '0'.
Additional copyright information field additional_copy_info
7-bit field, containing special data related to copyright information.
Previous PESPacket CRC field previous_PES_packet_CRC
16-bit field. This field contains a CRC value that generates a 0 output in the decoder's 16 registers after processing the previous PES packet (excluding the header of that PES packet). This CRC value is similar to that defined in Appendix A, but with the following polynomial:
x16+x12+x5+1
Note 2: This CRC value is intended for network maintenance, such as isolating sources of intermittent errors, and is not intended for use by the elementary stream decoder. It is only used to count data bytes since PES packet header data may be modified during transmission.
PESPrivate data flag field PES_private_data_flag
1 bit flag. When set to '1', it means that the PES packet header contains special data; when set to '0', it means that there is no special data in the PES packet header.
Pack header field flag field pack_header_field_flag
1 bit flag. When set to '1', it means that the PES packet header contains a GB/T AAAA.2 packet header or a program stream packet header. If this field is in a PES packet contained in a program stream, its value shall be '0'. In a transport stream, a value of '0' indicates that there is no packet header in the PES header.
Program packet sequence count flag field program_packet_sequence_counter_flag
1 bit flag. A value of '1' indicates that the PES packet has program_packet_sequence_counter, MPEG1_MPEG2_identifier and original_stuff_length fields. A value of '0' indicates that these fields are not included in the PES packet header.
P-STDBuffer flag field P-STD_buffer_flag
1 bit flag. When set to '1', it indicates that there are P-STD_buffer_scale and P-STD_buffer_size fields in the PES packet header. A value of '0' indicates that these fields are not included in the PES header.
PESExtension flag field PES_extension_flag_2
1 bit flag, when set to '1', it indicates that there are PES_extension_field_length and related fields.
PESPrivate data field PES_private_data
16-bit field. Contains private data. When these data are combined with the fields before and after them, they cannot conflict with packet_start_code_prefix (0x000001).
Pack field length field pack_field_length
8-bit field. Represents the length of pack_header_field() in bytes.
Program packet sequence count field program_packet_sequence_counter
7-bit field. It is an optional counter that is incremented with each subsequent PES packet from a program stream or GB/T AAAA.1 stream or PES packet with a single program definition in a transport stream to provide consistency with the continuity counter ( See 2.4.3.2) for similar functionality. It can be used to retrieve the initial PES packet sequence in the program stream or the original GB/T AAAA.1 stream. This counter wraps around to 0 after reaching its maximum value. PES groups cannot be repeated. Therefore, any two consecutive PES packets in a composite program should not have the same program_packet_sequence_counter value.
MPEG1 MPEG2Identifier field MPEG1_MPEG2_identifier
1 bit flag. When set to '1', it indicates that the information carried by the PES packet comes from the GB/T AAAA.1 stream; when set to '0', it indicates that the information carried by the PES packet comes from the program stream.
InitialInitial stuffing length field original_stuff_length
6-bit field. Specifies the number of padding bytes used in the initial GB/T XXXX.1 packet header or the initial GB/T AAAA.1 packet header.
P-STDBuffer scale field P-STD_ buffer_scale
1-bit field. It is only meaningful if the PES packet is included in the program stream. It indicates the scaling factor used to interpret subsequent P-STD_buffer_size fields. If the previous stream_id represents an audio stream, the value of this field should be '0'; if the previous stream_id represents a video stream, the value of this field should be '1'. For all other stream types, the value can be '0' or '1'.
P-STDBuffer size field P-STD_buffer_size
13-bit unsigned integer. It is only meaningful if the PES packet is included in the program stream. It defines the size of the P-STD input buffer BSn. If the value of P-STD_buffer_scale is '0', then P-STD_buffer_size measures the size of the buffer in units of 128 bytes. If the value of P-STD_buffer_scale is '1', then P-STD_buffer_size measures the size of the buffer in units of 1024 bytes. Therefore:
if ( P-STD_buffer_scale == 0)
BSn=P-STD_buffer_size ×128 #×1024 2-17)
When this field is received by the GB/T XXXX.1 system target decoder, its encoding value takes effect immediately.
PESExtension field length field PES_extension_field_length 7-bit field. Specifies the length in bytes of the data following this field in the PES extension field up to and including any reserved bytes.
Stuffing byte field stuffing_byte 8-bit field, its value is constant '1111 1111'. Can be inserted by the encoder to meet the needs of the channel etc. The decoder discards this field. Only 32 padding bytes may appear in a PES packet header. PESPacket data byte field PES_packet_data_byte This field should be consecutive from the elementary stream specified by the packet's stream_id or PID data bytes. When elementary stream data conforms to GB/T XXXX.2 or GB/T XXXX.3, this field should be bytes aligned with the bytes of this standard. The endianness of elementary streams should be maintained. The number of bytes in this field, N, is specified by the PES_packet_length field. N shall be equal to PES_packet_length minus the number of bytes between the last byte of the PES_packet_length field and the first PES_packet_data_byte.
Padding byte field padding_byte 8-bit field, its value is always '1111 1111'. This field is discarded by the decoder. For more PS stream format and analysis summary, please pay attention to the PHP Chinese website for related articles!
|