图1 软件设计总体结构
下面对主要的SI信息和DSM-CC表进行设计。 2.1 DDB的设置和消息封装 此部分将文件数据信息打包成DDB,并封装成DSM-CC分段(section)。在此次封装中,table_id=0x3C,说明DSM-CC分段中存放的是DDB消息。数据轮播对文件的大小是有限制的,因为DSI、DII和DDB是封装在DSM-CC分段中传输的,标准中规定每个分段不能超过4KB,以分段的大小为4096 B计算,DDB中的最大数据净荷为4066 B。同样可以计算出,一个分段可以容纳的群、模块的数目。一个分段最多可以容纳238个群或192个模块。并且每个模块最多可以包含256个DDB,因此一个模块的最大容量为4066×256 B。标准中规定,每个模块被分割为一个或多个数据块,这些数据块是封装在DDB中的,每个DDB消息具有相同的大小(除最后一个数据块的大小可能比较小以外)。在本设计中,采用了一个文件对应一个模块,一个DSM-CC分段对应一个DDB的数据组织方法。 (1) 如果播发文件小于4066 B,则只用一个DDB(或一个DSM-CC分段)就可以存放下,将table_id_extension设置为此消息的moduleid,last_section_number=blockNumber=0。并将生成的DDB文件以moduleid为名存储到指定的硬盘目录下。 (2) 如果文件大于4066 B但小于4 066×256 B,则需要对文件进行分块。根据文件的大小,计算分成的块的数量,并对每一块进行DSM-CC分段封装,并且有section_number=blockNumber。注意,除最后一块外(最后一块的大小可能小于4066 B),所有块的大小均为4066 B。当对所有的块封装完毕后,这样就完成了DDB的整个DSM-CC分段的封装。 2.2 DII的设置和消息封装 广播网络中模块的传输参数由DII消息来传送,在一个DII消息中可以传输同一个数据轮播的多个模块的传输参数。此部分将控制信息打包成DDB,并封装成DSM-CC分段。在此次封装中,table_id=0x3B,说明DSM-CC分段中存放的是DII消息。因为DII消息是作为顶级控制信息,transactionId=0x0000;downloadId的值同DDB中downloadId字段的值相同,在本软件设计中,可以根据实际情况自行设定模块个数,例如当有6个模块时,numberOfModules=0x0110。 2.3 SI信息的生成 在数据轮播中,SI信息主要包括NIT、SDT、PAT以及PMT,按顺序分别介绍如下。 (1) NIT表的设置 NIT表被分成网络信息段(network_information_section)。任何构成NIT表的段,都要由PID为0x0010的TS包传输。描述本地网络的NIT表所有段的table_id=0x40。original_network_id 和 transport_stream_id 两个标识符相结合唯一确定了网络中的TS流。 (2) SDT表的设置 SDT表被分成业务描述段(service_description_section)。任何构成SDT表的段,都要由PID为0x0011的TS包传输。描述本地网络的SDT表所有段的table_id=0x42。数据广播信息是通过SDT表中的data_broadcast_descriptor进行描述的,该描述符用于识别数据成分的类型并提供数据成分的文本描述,它所对应的descriptor_tag=0x64。 data_broadcast_descriptor含有数据广播的特征信息,如数据广播的类型、播发比特率等信息。对于数据轮播来说data_broadcast_id=0x0006。data_broadcast_descriptor中的component_tag与PMT中的stream_identifier_descriptor中的component_tag具有相同的值,通过二者的关系可获得数据轮播的PID。 (3) PAT表的设置 PAT表提供一节目号和包含此节目定义的传送流分组的PID之间的关联。PAT表的节目关联分段(program_association_section)都要由PID为0x0000的TS包传输。PAT分段的table_id=0x00。 (4) PMT表的设置 PMT表提供节目号码与组成它们的原始流之间的映射。任何构成SDT表的段,在标准中没有具体规定,其PID是私自定义的。在数据轮播中,stream_identifier_descriptor有效地建立了component_tag与PID的关联,可确定模块所在的PID; 将预播发文件中的数据作为TS流的负载并加上一定的表头和引导表(NIT表、SDT表、PAT表、PMT表和DSM-CC表(DII表、DSI表和DDB表)),形成完整的TS流,然后通过码流输出卡输出至复用器进行码流复用就可以在数据广播网络中传输了。 3 软件实现 发送端把预播发文件进行打包,定制TS流的软件是在Visual C++环境编程下实现的,程序的主界面如图2所示。 图2 数据轮播TS流生成系统界面
该界面主要由四个部分组成: (1) 参数部分: 参数部分共有四部分组成,分别为网络参数、传输系统参数、节目参数和数据轮播参数等,这些参数的值在TS流中是不确定的,需要由播发端在播发时设置。 (2) 预播发文件部分:在这部分中,指定需要封装成TS流的播发文件目录路径,本设计中可以播发任意类型的文件,例如天气预报、列车时刻表、航班信息、股票信息、房产信息、医疗信息等。 (3) TS流存放路径:确定生成TS流的名称和存放位置。 (4) 控制按钮部分:主要有两个按钮:生成TS流和退出;生成TS流按钮主要负责将选择的文件按照上面所介绍的各个表的设置方法将(2)中指定目录中的所有文件封装成完整的TS流文件;退出按钮用于退出操作界面。 运行发送端生成TS流的程序,可以得到封装好的、完整的TS流文件。用已有的分析软件EPGDump分析生成的TS流,分析结果如图3所示。 图3 对TS流的分析结果
4 结论 本文首先介绍了数据广播中的数据轮播规范,接着详细论述了数据轮播中的数据封装方式,并在Visual C++环境下设计软件实现了数据轮播发送端播发文件的TS流封装。结果表明,本文设计的软件系统能按照我国数据广播标准的要求,正确地对轮播数据进行封装,生成的TS流文件是完全符合数据广播标准的。数据广播是数字电视广播的重要组成部分,随着电视广播从模拟向数字化的过渡,数据广播在广播电视事业中的作用和影响也会越来越大。 参考文献[1] GY/T 201-2004, 数字电视系统中的数据广播规范 [S], 国家广播电影电视总局, 2004.03.[2] ETSI EN 300 468 V1.5.1, Digital Video Broadcasting (DVB) Specification for Service Information (SI) in DVB systems [S], 2003.05.[3] ETSI TR 101 211 V1.6.1, Digital Video Broadcasting (DVB) Guidelines on implementation and usage of Service Information (SI) [S], 2004.05.[4] TR.101.202.V1.1.1, Digital Video Broadcasting (DVB) Implementation guidelines for Data Broadcasting [S], 1999.02.[5] EN 301 192 V1.3.1, Digital Video Broadcasting (DVB) Specification for data broadcasting [S], 2003.05.[6] 钟玉琢, 王琦, 赵黎等. MPEG-2运动图像压缩编码国际标准及MPEG的新进展 [M], 北京: 清华大学出版社, 2002[7] ISO/IEC 13818-1, Generic Coding of Moving Picture and Associated Audio: systems [S], 1994.[8] ISO/IEC 13818-6, Generic Coding of Moving Picture and Associated Audio: Digital Storage Media Command & Control [S], 1996.06. 作者:天津大学电子信息工程学院 何宇清、王成优