MEPG2 初探(PSI,SI的解析)

             第一篇CSDN的blog就奉献给我的实习工作所学的内容吧。话不多说,实习的第一个任务就是解析PAT,PMT等表

     首先介绍下MEPG2: MPEG是活动图像专家组(Moving Picture Experts Group)的缩写,于1988年成立。目前MPEG已颁布了三个活动图像及声音编码的正式国际标准,分别称为MPEG-1、MPEG-2和MPEG-4,而MPEG-7和MPEG-21都在研究中。MEPG标准时运动图像专家组这些家伙制定的一系列利用数字压缩手段使运动图像压缩的国际标准。在MPEG-2标准中,有两种不同类型的码流输出到信道:一种是节目码流(PS ,Program Stream),,适用于没有误差产生的信道传送,比如我们要说的DVB存储介质。另一种是传送流(TS Transport Stream)适于有信道噪声产生的传输,适用于远距离传送。这里我们议论的是TS。

       ts 由固定的长度188B为长度。TS包由4B的包头,可变长度的调整头和净荷payload构成。

MEPG2 初探(PSI,SI的解析)_第1张图片

       包头包括同步字节,1b传送包差错指示,1b的净荷单元起始指示,1b传送有限权,13b的包标示符PID,2b的传送加扰控制,2b调整字段控制盒 4b的连续计数器。这里暂时不对这些作详细分析了


        MEPG2 初探(PSI,SI的解析)_第2张图片MEPG2 初探(PSI,SI的解析)_第3张图片


通过上面2张图我们可以得出这样一个结论,为了区分不同的表,必须要有标识符或者不同的结构,对于PAT,PMT等表来说,区分它们的方式自然是它们自身自身的table_id 和TS头的PID,为什么要多一个table_id 呢? 因为当PID为0x0011时,它可以表示SDT,BAT等多种表,所以加了一个table_id 作为一个二级目录。所以根据PAT的table_id 为0x00 和 PID为0x00进行Demux就可以得到PAT。

但是仔细一看,发现PMT没有指定PID,那怎么找呢?通过PAT,PAT是节目关联表,它有相应的PMT的信息


   

PAT的结构中当program_number 不为0是 就可以得到program_map_PID,这就是PMT的PID。显然PMT不止一个。得到了PMT的PID和已知的table_id 得到PMT已水到渠成.相应的NIT,CAT都有固定的PID和table_id,用相同的方法就可以找到。


你可能感兴趣的:(pat,MEPG2-TS,PMT表解析)