Transport Stream是由一连串的TS packets所构成,每个TS packet的长度固定是188 bytes,总共有几个TS packet则由需传输的数据量决定。
TS packet主要可以分成二个部分:packet header和payload。Payload中放置的可能是video PES packets、audio PES packets或其他数据。TS packet header则又可分成二个部分:固定为4 bytes的prefix和可变长度的adaptation field。Prefix中最重要的功能是,标示其后有没有adaptation field,有没有payload。Prefix中最重要的字段是”PID”(Packet IDentifier),PID的功能类似邮件包裹上的标签,指出包裹内容是什么资料。Adaptation中最重要的是包含PCR字段(Program Clock Reference),PCR是一种time stamp,decoder依此推算出时序。
Prefix的字段说明:
sync_byte:
此字段共有8 bits,其值为’0x47’,用来当作packet同步的信息。
transport_error_indicator:
是一个1 bit flag,辨别packet是否有错。若设为’1’表示此TS packet至少1 bit发生错误,直到更正后才重设为’0’。
payload_unit_start_indicator:
是一个1 bit flag。根据这个TS packet究竟是包含PES packet或包含PSI data,而分成二种情形:
若此TS packet的payload包含的是PES packet,设为’1’表示payload的开头是某个PES packet的第一个byte(注意!只能有一个PES packet开始于此TS packet的payload);设为’0’则代表没有PES packet开始于此TS packet的payload。
若此TS packet的payload包含的是PSI data,设为’1’表示此TS packet带有PSI section的第一个byte,而payload的第一个byte将是point_field,用来指出PSI section第一个byte的位置;’0’则表示payload中没有point_field。
另外,若此TS packet为null packet,此flag设为’0’。
transport_priority:
是一个1 bit indicator。设为’1’的packet比其他相同PID的packets有较高的priority。
PID:
共有13 bits。指出payload中资料的种类,如表1-1:
表1-1
value
0x0000
0x0001
0x0002~0x000F
0x0010~0x1FFE
0x1FFF
transport_scrambling_control:
共有2 bits。指出payload的scrambling mode,但TS packet header(包括prefix和adaptation_field)不可scramble。如表1-2:
表1-2
value
00
01
10
11
adaptation_field_control:
共有2 bits。指出此TS packet header之后是否跟着adaptation field或payload。如下表1-3:
表1-3
value
00
01
10
11
continuity_counter:
共有4 bits。随每个相同PID的TS packet而增加其值,到达最大值后从0重新计数,但若此packet的adaptation_field为’00’或’10’,此域值不会增加。若有连续两个相同PID的TS packet,它们的continuity_counter值相同,而adaptation_field设为’01’或’11’,表示它们是duplicate packets。当discontinuity_indicator设为’1’,则continuity_counter值发生discontinuity。