一、引言
当某个transport packet的TS Header中的PID属性的值为0x0000时,该transport packet的payload为Program association table ,即 PAT表。PAT表包含所有PMT表的目录列表,将program_number和PMT表的PID相关联,获取数据的起始。简单来讲,PAT表用来描述该TS流中有多少个节目。以及它们的PMT表的PID分别是多少,对TS流进行解复用时要先找到PAT表,根据其再找到PMT表,然后才可以找到音视频流。TS流中,PAT表会重复实现,以保证解码的实时性。
二、PAT表中的属性
根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第76页,PAT表包含下图中所示部分:
其中,比较重要的属性是:
table_id:占8位,为表id。PAT表的table_id固定为0x00。
section_syntax_indicator:占1位,为段语法标志位,值必须为1。
section_length:占12位,为该PAT表的section的长度,单位为字节。由于PAT表是一个section由一个transport packet的payload组成。所以PAT表的section_length为“从transport_stream_id属性开始到该PAT表结束(包含CRC)的总长度:
program_number:占16位。为TS流中一个频道的唯一标志。program_number的值为0x0000时,表示接下来的是network_PID(NIT的PID),否则接下来的是program_map_PID(PMT的PID):
network_PID:占13位。指定NIT表(Network Information Table)的PID:
program_map_PID:占13位。指定PMT表的PID,表示本频道使用哪个PID做为PMT的PID:
三、PAT表实例分析
用Elecard Stream Analyzer工具打开一个TS文件。可以看到其PAT表(Program association table)中program_number为1,表示该TS文件/TS流中有一个节目号为“1”的节目;program_map_PID为0x1000,表示要想获取这个节目的详细信息,就要去解析PID值为0x1000的PMT表:
PID值为0x1000的PMT表如下:
四、参考
PSI/SI专题 | OneLib智库,为您定制私人智库