分析一个传输包的结构
Transport Stream Packet的格式:一个MPEG-2传输包的大小是188bytes,其中包括四个bytes的header和紧跟其后的adaptation field。传输流包的数据结构时间关系我懒得画出来了,它的头通常有个十六进制值为47的8位的sync_byte,接着有2位indicator和1位优先级,似乎一直是010,再加上13位的PID,加起来就是16位,所以在DVB里面通常找4740XX,而XX就能识别是什么表格。
MPEG-2和DVB标准保留的PID值规定0×0000为PAT的PID,0001为CAT的PID,还有0010、0011、0012等,所以在码流中就很容易就可以看出这个包是什么东西了。
一个CAT的格式如下:
474001****************************D7557E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
474001表明这是一个CAT表格,因为CAT的PID是0×0001,47是同步码,8位,二进制为0100 0111,40 01的二进制是0100 0000 0000 0001,前面的010是上面所说的indicator和priority,后面的13位是PID,也就是规定为CAT的0×0001。紧接着后面的一连串乱七八糟的东西就去对照CAT表的格式吧,会发现其实并不是乱七八糟的,里面有个09标签,里面的数据说明了这个CAT里面带的EMM的PID。最后D7557E5F是CRC。
查看下载业务信息
在卫星直播系统中,规定PAT中program_number等于0xFFFE的业务为一个包含软件升级数据的业务,软件升级数据使用MPEG-2专有数据表的格式进行传输。
包含了软件升级业务对应的PMT表中基本流的stream_type为0xE0,以标识该基本流用于传输升级数据,同时在每个基本流循环里包含一个软件升级标识描述符(software_upgrade_id descriptor),描述软件升级数据信息(其格式见资料)。软件升级标识描述符的格式中:descriptor_tag为8位,取值为0xE3,其他的见资料。其中制造商标识(manufacture_id)、硬件标识(hardware_id)、型号标识(model_id)、都在这里找。
软件升级数据表Download Data Table用来传输软件升级数据,下载数据表由多个子表组成,每个子表分割成多个下载数据段,每个段的最大长度为4096字。Download_data_section中需要格外记住的标识符有table_id为0xA0,download_software_descriptor中的descriptor_tag为0xE2,跟着可以找到software_version、software_size、software_CRC等。
应该是这样。