一、概述
SDT表(Service Description Table,服务描述表),它描述了业务内容及信息,连接了NIT、EIT和PMT(PSI),以transport_stream_id连接了NIT和EIT;SDT的service_id必须与PMT中的program_number一致,因此,SDT又与PSI的信息连接。所谓业务也就是我们所理解的频道。
SDT是描述一个TS流中所有业务信息的一张表,重要的字段包含transport_stream_id,明确这些业务是属于哪个TS流的;另一个重要字段时候service_id,这是作为频道索引信息存在的。
二、SDT表结构
SDT:
PID = 0x0011
table_id = 0x42 (discribe actual TS,现行TS)
table_id = 0x46 (discribe not actual TS,非现行TS)
解析SDT表,解出相关的节目信息,主要是service_id和节目名字以及供应商的名字等
在SDT表中,我们主要关注的是:
service_id->节目的唯一标识号
descriptors_loop_length->当前service_id所有描述子的长度
除以上这两个外,我们还需要关注是什么描述子,在这个任务中,我们主要解析的是Service descriptor,下面是Service descriptor的结构图
描述子里面的所有内容,我们都需要去关注并且了解,找到对应的位置。当我们找到第一个Service descriptor后,后续的描述子就不用管了。
三、service_type(业务类型)
service_type(业务类型):这里的业务类型和NIT中的业务列表描述符中的service_type编码是一致的:
业务描述符是SDT中最重要的描述符,也是运营商中必须的描述符。其中的service_type描述这个业务类型的域;service_name描述频道名。
四、running_status(运行状态)
running_status(运行状态):表示业务状态,下表给出了业务状态
五、实例分析
1、包头47 40 11 1F
PID=0x0011,这说明是SDT表?;褂衟ayload_unit_start_indicator=1,说明在包头后需要除去一个字节才是有效数据。
2、包数据
42 F0 28 00 01 C1 00 00 FF 01 FF 00 01 FC 80 17 48 15 01 05 42 72 61 76 6F 0D 43 48 31 30 2D 73 74 72 65 61 6D 5F 31 33 C8 C8 60 FF ... FF
注意,由于包头中payload_unit_start_indicator=1,说明在包头后需要除去一个字节才是有效数据。
(1)42 F0 28 00 01 C1
(2)00 00 FF 01 FF
(3)00 01 FC 80 17
(4)48 15 01 05 42 72 61 76 6F 0D 43 48 31 30 2D 73 74 72 65 61 6D 5F 31
(5)CRC_32:33 C8 C8 60