APP下载

TS流复用器中EPG信息处理的优化*

2010-03-14于鸿洋

电视技术 2010年12期
关键词:复用器链表分段

葛 倩,于鸿洋,张 萍

(电子科技大学 电子工程学院,四川 成都 611731)

1 引言

在数字电视广播系统中,在TS(Transport Stream)传输流最终被送到信道设备进行信道发送之前,TS流复用器将不同来源的传输流合并为一个新的传输流。电子节目指南(Electronic Program Guide,EPG)是指在符合MPEG-2(13818-1)的TS传输流中插入DVB标准定义的业务信息(Service Information,SI),是一种收视导航工具,是交互电视的关键技术。EPG协助观看电视节目的用户选择节目,用户通过EPG可以得到节目的相关信息。

复用时,EPG等其他服务信息要通过复用器插入到TS流中。由于输入到复用器的各TS流的EPG信息可能不完整或需要在原TS流中插播节目,所以复用之前需对各个待复用TS流的EPG信息进行添加或修改。同时,复用器会对节目号等信息重新赋值,携带EPG信息的各个表也要根据复用器的修改情况进行相应的修改和合并。EPG的处理在TS复用中非常重要,笔者介绍了一种TS流复用器中EPG信息相关表的处理方法。

EPG信息由两部分信息组成:基本EPG信息和扩展EPG信息。基本EPG信息是指完全可以用《数字广播业务信息规范(GY/Z174-2001)》中的网络信息表(NIT)、业务群关联表(BAT)(可选)、业务描述表(SDT)和事件信息表(EIT)进行描述的EPG信息[1-3]。笔者主要介绍基本EPG的处理,包括对NIT,SDT和EIT的处理,BAT的处理方式与其他表相似。

2 EPG处理系统框图

笔者设计基于IP多路输入、多路复用输出的TS软件复用器中的EPG处理部分,复用器与设计均在Linux系统下实现。整个设计主要可分为EPG获取、EPG数据存储编辑、EPG发生等模块,系统框图如图1所示。

图1 系统框图

EPG获取模块主要完成对EPG信息的接收提取与分析。之后由EPG数据存储编辑模块将得到的信息存入数据库MySQL,并由用户进行导入或编辑操作,对EPG进行相应的添加或修改,最后EPG发生模块根据数据库中存储的新EPG信息和复用信息,产生新的EPG数据,按一定的时间间隔插入到输出TS流中。笔者将通过对各模块的实现方法介绍来论述TS流复用器中EPG信息处理的实现。

3 模块实现方法

3.1 EPG获取模块优化及实现

3.1.1 EPG获取优化

为了提高EPG的接收效率,对EPG获取的两个处理过程进行了优化,即各表section接收和接收信息完整性的判断。

1)section接收优化

部分机顶盒由于处理器主频和存储空间的限制,在接收PSI/SI表的section时采用PAT→NIT→SDT→EIT顺序接收的方法,即在一个时间段内只对一种PSI/SI表进行接收。会出现接收到SDT或EIT的包时,因为PAT或NIT没有接收完成或者丢包而放弃接收分析的情况,当需要接收这些表时又要等到下一个发送周期,这样接收完所有的表可能需要几个发送周期,接收效率较低。由于系统在PC上实现,存储空间和处理器主频的限制较小,故对接收方式进行了优化,采用并行接收,即先接收PAT,之后并行接收NIT,SDT和EIT,可以节省时间。并行接收主要体现在section的接收处理上,接收步骤为:

(1) 过滤 PID=0x000的包,分析PAT,获得 NIT的PID、该流的节目数量以及所有节目的节目号,存入节目数据链表。由于PAT发送周期较短(为40ms),这一步骤可在很短的时间内完成。

(2)对其余3种表的section进行并行接收。程序根据TS包的PID过滤出需要的包,分别送入NIT,SDT和EIT各自的接收通道中,每个通道利用独立的数据结构来记录section接收情况信息和独立的存储空间,存储接收到的section内容,使得各通道互不干扰。

(3)section进入各自的接收通道后,先判断是否丢包,之后对TS包解包,将section内容存入缓冲,根据section_length来判断一个section是否接收完成,如果完成,按照各表的结构,分析该section,存储相关信息,最后判断接收信息的完整性,决定是否继续接收。

2)判断信息完整性优化

在判断接收信息的完整性时,不采用以往一些设计中根据last_section_number来判断的方法,这要求section以section_number的顺序依次接收,若开始接收时错过section_number为0的包或者丢包,则导致之后section_number的包需等到下一发送周期才能接收,降低了接收效率,PSI/SI发送周期较长或者网络质量较差时影响尤为严重。

笔者采用一种改进的接收判断方法,可以解决这个问题,即利用段存在标志数组来判断信息完整性,不要求按照section_number顺序接收。具体实现为:程序首次收到该表section时,通过last_section_number(EIT还需要segment_last_section_number和last_table_id以及本TS流中的节目数和节目的program_number)计算出该表的section总数和所有section_number,以此建立section存在标志数组。以SDT为例,若得到last_section_number为1,则可以计算出该流SDT分段有2个section,section_number分别为0和1,即可建立标志数组,把0和1的位置置位为存在。之后每接收完一个section,把对应标志数组中的该section标志置位为已接收,并检查所有的存在标志,若有存在标志未置位为已接收,则继续接收该表,否则该表接收完成,停止接收。

3)优化结果

优化以存储空间为代价来提高接收效率,适合于在存储空间限制较小的PC上实现。若不经优化,系统可能需要接收端接收到数次完整的信息才能完成接收,而优化之后的系统接收端只须收到一次完整的信息,就可以完成接收,减小了PSI/SI发送周期和丢包的影响。

3.1.2 表分析处理流程图

系统对各表采用介绍的优化方法进行并行接收,完成EPG信息的分析存储,接收框图如图2所示。

3.2 EPG数据存储和编辑

EPG相关表格接收完毕后,形成数据链表,结构如图3所示。

这样的结构可以通过输入TS流标号和节目号迅速定位节目信息,使之在链表中的添加删除灵活简便,也便于之后的表生成模块的处理。

选用的数据库为MySQL。MySQL是一个开放源码的关系数据库管理系统,支持Linux操作系统,CPU利用率高,查询速度快,还提供多种语言支持,满足EPG信息的多语言要求。基于这些特性,MySQL可以满足设计中对EPG处理的要求。

所有的EPG信息存入创建的database中,程序根据输入TS流的EPG建立table:SDT,EIT_PF和EIT_schedule_stream.No_prog_program.No,存入相关信息。

用户通过EPG编辑器对EPG信息进行编辑。其功能模块包括网络配置和事件编辑(包括节目编辑和节目单导入导出),完成后,将修改的信息导入数据库。

图3 EPG信息数据链表

3.3 EPG数据打包发送

3.3.1 各表section生成

为了便于表的生成,为各输出流建立一个数据结构数组mult_infomation,存储该流的复用信息,其中包含了stream_id(输入 TS 流标号),origin_program_number(该节目的原始节目号),new_program_number(在复用流中的节目号)等信息,数组的项数为该复用流中所包含的节目数,通过该数据结构可以方便地得到节目被复用到输出流中的位置。

NIT,SDT和EIT在TS流中的独立性各不相同,所以section生成方式稍有不同。NIT对网络信息进行描述,在同一网络中,所有流的NIT是相同的,只须生成一种NIT section之后进行打包,作为同一网络中所有流的NIT包,对于SDT,每个流的SDT section各不相同,需对各输出流生成各自的SDT section,之后再打包,EIT是以节目为单位独立的,即相同节目的EIT section除了service_id,其余部分在各TS流中都是相同的,所以先对各输入TS流的各节目生成EIT section,之后输出流根据mult_infomation从这些EIT section中选出需要的section,修改service_id,进行打包。

生成section的信息从数据库中读取,之后根据各表的结构建立section,完成后计算CRC并插入。输出TS流还需带有同一网络中其他TS流的SDT和EIT信息,传输这些信息需修改 table_id(SDT改为 0x4F,EIT在原table_id上加上0x10)和重新计算CRC。

3.3.2 生成各表的待发送TS包链表

SDT和EIT作为其他流信息发送时只须改变table_id和CRC,所以同一网络TS流中的SDT和EIT除table_id和CRC部分不同之外,其余部分完全相同,同时,一个网络中所有流共用一个NIT。由于设计的复用器输出流均在同一网络中,故各表可分别仅用一个TS包链表和相应的修改信息构成网络中所有输出流的待发送包。

为了建立链表,须对生成的section打包并存储到TS包数据结构中,该数据结构除了有TS包的完整内容之外,还带有output_id(输出流编号)和需要替换的内容(table_id和CRC)。建立好的链表如图4所示(以SDT为例),其中NEXT_SDT_USE[output_id]为指向TS包数据结构的指针,每个输出流均有1个,用于在发送TS包时指示当前应发送的包,header_n和rear_n为指向输出流n的本流SDT包链表的头和尾。

图4 TS包链表结构

3.3.3 各输出流EPG包发送

对于每一个输出流,需发送的表为:网络NIT、流SDT和EIT、同一网络中其他流SDT和EIT分段。DVB关于SI表的传输间隔要求如表1[4]所示。

表1 DVB关于SI表的传输间隔

以SDT发送为例,每隔2 s发送一次本流SDT分段,每隔10 s发送一次本流和其他流SDT分段,每发送一个包,NEXT_SDT_USE[output_id]就指向下一个包,当发现发送完成标志(仅发送当前流分段时标志为rear_n,发送所有分段时标志为header_n)即停止发送,等待下一发送周期,EIT和NIT的发送与此类似。当TS包作为其他流分段 (根据结构体中output_id和当前输出流id判断)发送时,须根据结构体中的修改信息进行修改。

3.3.4 EPG信息更新

EPG更新可以采用两种方式:仅允许用户手动更新和根据输入TS流更新。更新方式的选择以输入TS流为单位。

1)用户手动更新。在复用过程中,用户通过EPG编辑器更新EPG信息,导入数据库,程序根据数据库中的信息重新生成表,并使表的version_number加1,完成更新。

2)根据输入TS流更新。开始复用后,程序监视各种表的version_number,若发现版本号变化,进行相关表的重新接收存储,按照复用信息mult_infomation确定应该重建哪些表,同样,使表的version_number加1。更新原则为[5]:

(1)若NIT变更,重新建立整个网络的传输流和业务信息。

(2)若SDT变更,重新建立对应传输流里的业务信息。

(3)若EIT变更,不改变整个网络的传输流和业务信息,只改变相应的事件信息。

4 实验结果与分析

TS流复用器的EPG处理系统工作于Linux系统下,完成复用器中EPG信息的添加、删除等处理,进行测试,结果与分析如表2所示。

表2 系统EPG接收效率测试结果

测试中的丢包由随机删去发送流PSI/SI包来模拟,丢包程度为能够保证接收端在1min内收到一次完整的信息,接收超时时间设为1 min,若在网络环境较差的情况下,可适当增加接收超时时间,以保证获取完整的信息。在不丢包的情况下,理论上,对于TS1和TS2,优化后的接收方式需要的最长时间分别为5 s和30 s。由表2的测试结果可以看到,优化后的接收方式所用的时间小于未优化的接收方式,并且丢包对优化后的接收方式影响较小,对于没有优化的接收方式,丢包的影响在发送周期较长的分段时尤为严重。

之后对EPG信息通过EPG编辑器进行修改,输出流经EPG分析软件分析,各表均正常。EPG编辑器界面如图5所示。

图6和图7分别为输入输出流的EPG在数据库中的情况 (系统对复用输出流再次进行接收可分析得到输出流的EPG情况),右半部分为数据库中的table,左半部分为SDT内容。输入为2个TS流,第1个流没有EPG信息,SDT中的provide_name和program_name默认为节目号。经EPG编辑后输出,输出为1个流,第1个流选取节目号为ec1的流,第2个流选取所有节目,可以看到,节目号均重新赋值,并且对ec1节目的SDT进行了添加。

[1]王大鹏.电子节目指南(EPG)在机顶盒中的实现[C]//国际有线电视技术研讨会论文集,2003.杭州:中国广播电视协会技术工作委员会,2003:406-410.

[2]ISO/IEC 13818-1,Third edition 2007.10 information technologygeneric coding ofmoving pictures and associated audio information:system[S].2007.

[3]方涛.数字电视业务信息及其编码[M].北京:国防工业出版社,2003.

[4]Guidelines on implementation and usage of service information[EB/OL].[2010-04-13].http://www.bjpace.com.cn/data/tec/tec-DVB/DVB-20BlueBooks-20Standards/Specifications-20and-20Standards/multiplexing/dvb-si/a005r1.pdf.

[5]陈德林.EPG前端SI发表和机顶盒终端收表策略[J].广播与电视技术,2005(8):99-101.

猜你喜欢

复用器链表分段
一类连续和不连续分段线性系统的周期解研究
基于二进制链表的粗糙集属性约简
跟麦咭学编程
分段计算时间
基于分束器与双向型的光分插复用器分析研究
基于链表多分支路径树的云存储数据完整性验证机制
基于SDH 网络的数字电视平台架构分析
3米2分段大力士“大”在哪儿?
复用器与遥控设备兼容问题探讨及解决方案
链表方式集中器抄表的设计