bslbf代表位串,即“Bit string, left bit first ”,
uimsbf代表无符号整数,即”unsinged integer, most significant bit first”,数字表示该数据项所占的比特数
又一解释:
bslbf (bit string, left bit first) 比特串,左位在先
uimsbf (unsigned integer,most significant bit first) 无符号整数,高位在先
ISO/IEC13818-1 TS 格式
transport_packet(){
sync_byte 8 bslbf
transport_error_indicator 1 bslbf
payload_unit_start_indicator 1 bslbf
transport_priority 1 bslbf
PID 13 uimsbf
transport_scrambling_control 2 bslbf
adaptation_field_control 2 bslbf
continuity_counter 4 uimsbf
if(adaptation_field_control=='10' ||
adaptation_field_control=='11'){
adaptation_field()
}
if(adaptation_field_control=='01' ||
adaptation_field_control=='11') {
for (i=0;i<N;i++){
data_byte 8 bslbf
}
}
}
表6.1 TS Header 语法
Sync_byte:总是0x47
Transport_error_indicator:总是0
payload_unit_start_indicator:当传送RTP 数据时,’1’表示Payload 包含RTP Header(即
1 个RTP 包的开始),’0’表示Payload 不包含RTP Header;当传送PSI 信息时,’1’表示包含
PSI 信息的第一个字节(即完整PSI 信息的开头),’0’表示不是一个PSI 的开始。
transport_priority:总是0
PID:13 位,其中PID0x0000 代表PAT,PID 范围0x0001-0x000F 是保留的,PID 值0x1FFF 代表空包
transport_scrambling_control:总是0
adaptation_field_control:
00:备用
01:没有adaptation_field
10:只有adaptation_field,没有Payload
11:有adaptation_field,adaptation_field 之后是Payload
在本规范中, adaptation_field 只是用作填充。所以,只会用到值01、11。
具体的填充细节见“TS包的填充规范”
continuity_counter:
4Bit 的计数器,0000-1111。对于同一个PID,顺序的TS 包自动增长,到1111 后转到0000。
该字段用作RTP 组包的排序功能,以后可以扩展支持重传等其它功能。
对于Payload 不足184 字节的情况,要进行填充。填充采用adaptaion_field,而且在本规范
中adaptation_field 只是用作填充使用。
Adaptation_field 的语法如表6.2 所示:
Syntax No. of Bits Mnemonic
adaptation_field() {
adaptation_field_length 8 uimsbf
if(adaptation_field_length >0) {
discontinuity_indicator 1 bslbf
random_access_indicator 1 bslbf
elementary_stream_priority_indicator 1 bslbf
PCR_flag 1 bslbf
OPCR_flag 1 bslbf
splicing_point_flag 1 bslbf
transport_private_data_flag 1 bslbf
adaptation_field_extension_flag 1 bslbf
if(PCR_flag == '1') {
program_clock_reference_base 33 uimsbf
Reserved 6 bslbf
program_clock_reference_extension 9 uimsbf
}
if(OPCR_flag == '1') {
original_program_clock_reference_base 33 uimsbf
Reserved 6 bslbf
original_program_clock_reference_extension 9 uimsbf
}
if (splicing_point_flag == '1') {
splice_countdown 8 tcimsbf
}
if(transport_private_data_flag == '1') {
transport_private_data_length 8 uimsbf
for (i=0; i<transport_private_data_length;i++){
private_data_byte 8 bslbf
}
}
if (adaptation_field_extension_flag == '1' ) {
adaptation_field_extension_length 8 uimsbf
for ( i=0;i<adaptation_field_extension_length;i++) {
Reserved 8 bslbf
}
}
for (i=0;i<N;i++){
stuffing_byte 8 bslbf
}
}
}
adaptation_field_length:填充的具体字节数,不包括adaptation_field_length 这个字节。
如果值为’0’,表示没有其它的填充字节。这用来填充1 个字节的情况。
discontinuity_indicator:总是’0’
random_access_indicator:总是’0’
elementary_stream_priority_indicator:总是’0’
PCR_flag:总是’0’
OPCR_flag:总是’0’
splicing_point_flag:总是’0’
transport_private_data_flag:总是’0’
adaptation_field_extension_flag:总是’0’
stuffing_byte: 填充字节为’0xff’。