PES扩展标志字段 PES_extension_flag
1位标志。置'1'时表示PES分组标题中有扩展字段;值为'0'表示没有该字段。 PES标题数据长度字段 PES_header_data_length
8位字段。指出包含在PES分组标题中的可选字段和任何填充字节所占用的总字节数。该字段之前的字节指出了有无可选字段。 标记位字段 marker_bit
值为'1'的1位字段。 展现时间戳字段 PTS
展现时间与解码时间的关系如下:PTS是一个编码在三个分离字段中的33位数字。它指出了基本流n的第k个展现单元在系统目标解码器中的展现时间tpn(k)。PTS的值以系统时钟频率的1/300(即90 kHz)为单位。展现时间由PTS根据下式计算而来。
PTS(k)=((system_clock_frequency×tpn(k)) DIV 300) % 233
其中,tpn(k)是展现单元Pn(k)的展现时间。 解码时间戳字段 DTS
DTS是一个编码在三个分离字段中的33位数字。它指出了基本流n的第j个展现单元在系统目标解码器中的解码时间tdn(j)。DTS的值以系统时钟频率的1/300 (即90 kHz)为单位。解码时间由DTS根据式计算而来:
DTS(j)=((system_clock_frequency×tdn(j)) DIV 300) % 233
其中,tdn(j)是存取单元An(j)的解码时间。 ESCR字段 ESCR_base,ESCR_extension
42位字段,分两部分编码。第一部分是一个长度为33位的字段;第二部分是一个长度为9位的字段。
基本流速率字段 ES_rate
22位无符号整数。对于PES流而言,它指出了系统目标解码器接收PES分组的速率。该字段在它所属的PES分组以及同一个PES流的后续PES分组中一直有效,直到遇到一个新的ES_rate字段。该字段的值以50字节/秒为单位,且不能为0。 特技方式控制字段 trick_mode_control
3位字段。它表示作用于相关视频流的特技方式。对其它类型的基本流,该字段及其后5位的含义没有定义。 字段标识字段 field_id
2位字段,表示应该显示哪个(些)字段。 片内参考字段 intra_slice_refresh
1位标志。置'1'时表示PES分组的视频数据编码片中可能有丢失的宏块;置'0'时,表示上述情况可能不出现。
频率截断字段 frequency_truncation
2位字段。指出在对PES分组中数据进行编码时可能用到受限系数集合。
显示次数控制字段 rep_cntrl
5位字段,指出隔行画面中每一字段的显示次数或渐进画面显示次数。 附加版权信息字段 additional_copy_info
7位字段,包含与版权信息有关的专用数据。 前PES分组CRC字段 previous_PES_packet_CRC
16位字段。在对前一个PES分组(不包括该PES分组的标题)进行处理后,该字段包含一个在解码器的16个寄存器中生成0输出的CRC值。 PES专用数据标志字段 PES_private_data_flag
1位标志。置'1'时表示PES分组标题中包含专用数据;置'0'时表示PES分组标题中无专用数据。
包标题字段标志字段 pack_header_field_flag
1位标志。置'1'时表示PES分组标题中有包标题或节目流包标题。若该字段在包含于节目流中的PES分组中,其值应为'0'。在传输流中,当值为'0'时表示PES标题中无包标题。 节目分组序列计数标志字段 program_packet_sequence_counter_flag
1位标志。值为'1'时表示PES分组有program_packet_sequence_counter,MPEG1_MPEG2_identifier和original_stuff_length字段。值为'0'时表示PES分组标题中无这些字段。
P-STD缓冲区标志字段 P-STD_buffer_flag
1位标志。置'1'时表示PES分组标题中有P-STD_buffer_scale和P-STD_buffer_size字段。值为'0'时表示PES标题中无这些字段。 PES扩展标志字段 PES_extension_flag_2
1位标志,置'1'时表示有PES_extension_field_length及相关字段。 PES专用数据字段 PES_private_data
16位字段。包含专用数据。这些数据与其前后的字段组合在一起时,不能与packet_start_code_prefix (0x000001)冲突。 包字段长度字段 pack_field_length
8位字段。表示pack_header_field()以字节为单位时的长度。 节目分组序列计数字段 program_packet_sequence_counter
7位字段。
MPEG1 MPEG2标识符字段 MPEG1_MPEG2_identifier
1位标志。置'0'时表示PES分组携带的信息来自于节目流。 初始填充长度字段 original_stuff_length
6位字段。指定分组标题中的填充字节数。 P-STD缓冲区比例字段 P-STD_ buffer_scale
1位字段。仅当该PES分组包含于节目流中时才有意义。它指出了用来解释后续P-STD_buffer_size字段的比例因子。若前面的stream_id表示一个音频流,该字段值应为'0';若前面的stream_id表示一个视频流,该字段值应为'1'。对于所有的其它流类型,其值可以为'0'或'1'。
P-STD缓冲区大小字段 P-STD_buffer_size
13位无符号整数。仅当该PES分组包含于节目流中时才有意义。它定义了P-STD输入缓冲区的大小BSn。若P-STD_ buffer_scale的值为'0',那么P-STD_buffer_size以128字节为单位来度量缓冲区的大小。若P-STD_buffer_scale的值为'1',那么P-STD_buffer_size以1024字节为单位来度量缓冲区的大小。
PES扩展字段长度字段 PES_extension_field_length
7位字段。指出了跟在该字段之后在PES扩展字段中直到且包括任何保留字节的数据的字节长度。
填充字节字段 stuffing_byte
8位字段,其值恒定为'1111 1111'。可以由编码器插入以满足通道的需求等。解码器丢
弃该字段。一个PES分组标题中只能出现32个填充字节。 PES分组数据字节字段 PES_packet_data_byte
该字段应该是来自于由分组的stream_id或PID所指定的基本流的连续数据字节。 填料字节字段 padding_byte
8位字段,其值恒定为'1111 1111'。该字段被解码器丢弃。
3.4 节目流映射
offset 0 3 4 6 7 8 10 10+N 12+N program_stream_map() { packet_start_code_prefix map_stream_id program_stream_map_length current_next_indicator reserved program_stream_map_version reserved marker_bit program_stream_info_length for (i=0;i 节目流映射中各字段的语义定义 分组起始码前缀字段 packet_start_code_prefix 24位码。它和跟随其后的map_stream_id共同组成一个分组起始码以标志分组的开始。该字段是值为'0000 0000 0000 0000 0000 0001' (0x000001)的位串。 映射流标识字段 map_stream_id 8位字段,值为0xBC。 节目流映射长度字段 program_stream_map_length 16位字段。指示紧跟在该字段后的program_stream_map中的字节数。该字段的最大值为1018(0x3FA)。 当前下一个指示符字段 current_next_indicator 1位字段。置'1'时表示传送的节目流映射当前是可用的。置'0'时表示传送的节目流映射还不可用,但它将是下一个生效的表。 节目流映射版本字段 program_stream_map_version 5位字段,表示整个节目流映射的版本号。一旦节目流映射的定义发生变化,该字段将递增1,并对32取模。在current_next_indicator为'1'时,该字段应该是当前适用的节目流映射的版本号;在current_next_indicator为'0'时,该字段应该是下一个适用的节目流映射的版本号。 节目流信息长度字段 program_stream_info_length 16位字段,指出紧跟在该字段后的描述符的总长度。 标记位字段 marker_bit 1位字段,取值为'1'。 基本流映射长度字段 elementary_stream_map_length 16位字段,指出在该节目流映射中的所有基本流信息的字节长度。它包括stream_type、elementary_stream_id和elementary_stream_info_length字段。 流类型字段 stream_type 8位字段,根据表2-29规定了流的类型。该字段只能标志包含在PES分组中的基本流且取值不能为0x05。 基本流标识字段 elementary_stream_id 8位字段,指出该基本流所在PES分组的PES分组标题中stream_id字段的值。 基本流信息长度字段 elmentary_stream_info_length 16位字段,指出紧跟在该字段后的描述符的字节长度。 CRC 32字段 CRC_32 32位字段。 4. 恒亿录像解析 4.1 PS包头 00 00 01 BA表示包头起始码; BA ~FE按照包头信息对应解析;其中FE的后3位表示后面的填充字节的长度,对应为6; FF~FB为对应的填充字节。 4.2 系统头部 恒亿录像没有做相关规定,不影响PS的复用和解复用。 4.3 节目流映射 其中00 00 01 BC为节目流的起始符; 00 56为节目流映射的长度(不包含节目流起始符和长度字节本身),大小为86个字节; 00 24表示流映射信息的长度,为36个字节; 后面36字节为节目流映射的描述信息; 00 28表示基本流映射的长度,为40个字节; 后40字节为基本流映射,按照“1字节流类型字段”“1字节基本流标示字段”“2字节基本流信息长度字段”“基本流信息”循环。1B表示H264编码格式,E0为视频流,指出该基本流所在PES分组的PES分组标题中stream_id字段的值,00 10为长度,16个字节,后16个字节为信息长度。91为G711.3音频格式,C0为音频流,00 0C为音频信息的长度,12个字节。最后面的F1 0C 61 7A为CRC(循环冗余校验)。