复用器是数字电视前端平台的关键设备,它的主要功能是完成对输入多路传输流(Transport Stream,TS)的复用工作,它的性能稳定性直接影响前端平台的运行。而复用器对传输流中节目特殊信息(Program Spe-cial Information,PSI)的分析处理是否完整全面,则直接影响到复用器其他功能部分的运行结果是否正确。对PSI信息的检测分析是复用器设计中首要的也是最重要的部分之一。下文将对PSI信息检测问题进行深入的分析探讨。
1 TS流语法结构
传输流以TS包为单位,其中每个包的长度为188 B,这188个字节大致可以分为:包头、调整字段和有效负载三个主要部分。包头占4个字节,如图1所示。
同步字节:8 b,值为0x47,表示一个TS包的开始。传输错误指示:1b,当置为1时,表明在相关的TS包中至少有一个不可纠正的错误。有效负载起始指示:1 b,在带有PSI信息时,置1表示TS包含有PSI部分的第一个字节并带有pointer field字段,否则表示不含有PSI的第一个字节。传输优先级:1 b,置1表明相关的包比其他具有相同PID但此位没有置1的TS包有更高的优先级。PID:13 b字段,指示传输流有效负载的数据类型。传输加扰控制:2b,用来指示TS包有效负载的加扰方式。自适应字段控制:2b,用来指示本TS包首部是否跟有调整字段。连续计数器:4b,随着每一个具有相同PID的传输流包而增加,当它达到最大值后又恢复到0。
节目专用信息PSI用来描述TS流的组成结构。它包括节目关联表(Program Association Table,PAT)、节目映射表(Program Map Table,PMT)、网络信息表(Network Information Table,NIT)和条件访问表(Conditional Access Table,CAT)。PAT是PSI信息的最上层,列出了传输流中所有节目所对应的PMT的PID值,可以根据节目的PID值找到相应的PMT信息及NIT信息。节目映射表PMT提供节目号码与组成它们的原始流之间的映射关系,这种映射表是一个TS流中所有节目定义的集合。网络信息表NIT是可选的,其内容是私有的,通常包括用户选择的服务和通道频率、卫星脉冲发射机、调制特性等的映射。条件接收表CAT提供条件接收(CA)系统的相关信息,指定EMM的PID值及相关的参数。
2 PSI信息提取分析
由于PSI信息四个表结构差别不大,所以提取算法也大致相似,在此主要以PAT表为例详细介绍J"SI信息的提取流程。对TS流的分析在FPGA内部以字节为单位。PAT语法结构如图2所示。
PAT的提取流程:
(1)首先应在传输流中找到包首PID 13位全为0且有效负载起始指示位为l的TS包。
(2)然后根据自适应字段控制位判断是否含有调整字段,再结合pointer_field字段值找到table_id,从此字段开始到CRC校验字节之前,将对所有有效数据进行CRC校验。
(3)接下来是section_length字段,由此字段可以得到该PAT分段的TS包个数。
(4)接下来两字节是传输流标识字段,再接下来的一个字节包含着版本号信息及当前段是否可用信息。保留当前版本号并与下一次的版本号对比以确定版本是否有更新。若当前段可用,则继续,否则返回(1)。
(5)接下来的两个字节分别是当前分段号和最后分段号,由此信息可以得知是否提取了所有分段的信息,即对整个PAT表是否进行了一次完整的分析。
(6)对循环字段的处理,每4字节一次循环,由前两字节的节目号可以得知后2字节的PID是PMTPID还是NIT—PID。在循环字段结束后立即停止CRC校验并把校验的结果和码流中的CRC四字节进行比较从而得知传输是否有误。
(7)在TS包结尾处判断当前PAT分段是否结束,否则继续检测下一TS包,是则进一步判断是否分析了所有分段,若已经分析了所有分段则给出一个表示PAT分析全部结束的信号,否则转到(1)继续分析下一分段。
3 信息提取的硬件实现
信息提取框图如图3所示。
一路TS流首先经过芯片CY78933进行串并转换再进入同步模块进行同步锁定后,其他各模块才开始工作。由图3可看出,以上各检测模块是并行独立工作的,但是PMT检测模块、ELE检测模块、NIT检测模块和EMM检测模块要想进行有效工作,需要先接受其他模块提供的信息,具体为PMT和N1T检测模块要接受PAT检测模块提供的PID信息,ELE检测模块要接受PMT检测模块提供的PID信息,EMM检测模块要接受CAT检测模块提供的PID信息。
3.1 信息提取同步模块
根据MPEG一2标准可知,一个有效的TS包长为188 B,且其同步头为8′h47,只有在有效地识别了包头,才能严格地按照MPEG一2标准对数据包的每一位进行分析。在同步模块检测中,当找到8′h47时,必须连续3~5次(可通过参数设置)隔188 B都找到8′h47,才能认为实现了同步。另外考虑到TS包可附加16
B的前向纠错码,故该模块做成188/204 B自适应,这样可以提高通用性。
3.2 检测模块
由于PAT,CAT,PMT,NIT等检测模块在硬件设计上都很类似,故本文重点探讨PAT检测模块的硬件设计,其他检测模块的设计将不再赘述。
PAT检测模块按照PAT提取流程进行工作,若发现PAT分段并且CRC校验正确后,提取里面的PMT—PID和NIT-PID并分别送到PMT检测模块和NIT检测模块。对PAT表全部分段都分析完后启动PMT、检测模块和NIT检测模块对TS流进行实时检测,若PAT表有更新,则将新的信息再送给此两模块,以确保实时跟踪TS流的最新变化。
在硬件实现上,从实用的角度出发,考虑到实际码流中可能出现的各种情况,将其归为三类处理:
(1)一个分段只由一个TS包来承载。
(2)一个分段由多个TS包来承载。
对于此类情况(即该分段的长度使得一个TS包无法完全承载此分段),要考虑的是第一个TS包在该分段的什么位置结束。又可以分为三种情况:
①第一个TS包结束在该分段的table_id字段到last_sectiOn_number字段这一区间。这也就是第一个TS包大部分为调整字段占据时的情况;
②第一个TS包结束在循环字段中的某个字节的情况;
③第一个TS包结束在四个CRC校验字节中的某个字节处,考虑到有三个以上TS包时更确切地说应该是最后一个TS包只承载了CRC校验字节的某几个。
(3)一个TS包承载多个分段
此类情况是第(2)类中③情况的延伸。比如一个PAT表有两个分段,第一个分段由第一个TS包承载后只剩下一个CRC校验字节需要第二个TS包来承载。那么第二个TS包只承载这一个CRC校验字节无疑将是很大的浪费,此时可以充分利用第二个TS包。使它也承载第二个分段,这就是一包多段的情况。对于一段单包、一段多包(包括三种情况)和一包多段等多种情况,在设计上无疑要充分发挥FPGA有限状态机的强大优势来进行处理。
将以上各种情况恰当地对应于状态机的各个状态,根据包头提供的信息及表段信息可以进行逻辑判断,从而控制各个状态之间的转移。在代码实现上,逻辑判断后控制信号的是否准确及时,至关重要。举例来说,把对PAT表的CRC校验分析作为一个独立模块,在分析该表时就要给予该模块准确的控制,假如PAT有两个TS包,在第一个TS包的table_id字段就要使能该模块,第一个TS包结束时要禁止使能该模块,到第二个PAT包第五个字节再使能CRC校验模块,直到CRC校验字节前再关闭该模块,总之控制信号要确保CRC校验模块校验的是PSI表的所有有效信息。
另外需要说明的是PMT检测模块在实现上不需要考虑多个分段的情况,但有两处描述子要进行CA描述子的检测;NIT检测模块可以对指定描述子做检测,如卫星传送系统描述符等;ELE检测模块检测elementary_PID、PCR PID和可能存在的ECM_PID,该模块能正常工作说明PMT检测模块正确工作;同理EMM检测模块能正常工作说明CAT检测模块正确工作。
3. 3 资源的优化
由图3可见,PAT检测和CAT检测同为一个模块。这也算是本文在硬件实现上的一个创新点。之所以如此,是因为笔者在程序代码的编写上巧妙地将对CAT的检测分析融入到对PAT的检测分析中,而整合到一起的检测模块消耗的资源比原先PAT检测模块消耗的资源只增加一点点,这就意味着几乎没有增加硬件资源消耗的情况下完成了对CAT的检测,从而大大节省了FPGA内部宝贵的逻辑资源。
经过仔细分析对照,笔者发现PAT表和CAT表有着惊人的相似性,这种相似性给编写硬件语言带来了极大的便利。PAT和CAT的差别主要在循环字段,其他字段位置字节数都能很好对应。若把对两个表的循环字段的处理分别独立为两个小模块,则剩下的部分就可以很好地将对PAT和CAT的处理融合到一起,融合到一起的模块只需要给这两个小模块恰当的控制即可。
4 实际测试
本设计采用硬件平台DE2开发板,FPGA型号EP2C35F672C6N,接口芯片通过DE2板GPIO接口和FPGA相连。测试码流有将卫星信号转换而得的实时码流和人工制作的非实时码流。对于A类情况,采用由亚洲三号卫星频点为4095H的信号转换的实时码流进行测试,如图4所示,从左向右:数码管数值1和3分别表示有一套节目,该套节目里有3个PID,它们是13′h0021,13′h00A0,13′h0050;三个红色LED灯亮表示发现PAT,PMT和基本音视频包,两个绿色LED灯亮表示接收同步及提取分析完PSI信息。DE2板显示的节目数及PID值跟专业数字卫星接收机显示的结果一样,表明PSI信息检测正确。对于其他各种可能的情况,由于在实际码流中很少见,所以采用人工构造符合标准的码流进行验证,发现结果也是正确的。
5 结 语
随着将来复用器应用范围的扩展,数据业务量的加大,实际码流中会出现一段多包或一包多段的情况,本文针对实际码流中可能出现的各种情况进行实用性的设计,完全能保证复用器在无论业务量多大的场合都能进行完整全面的PSI信息检测,具有很强的现实意义。