博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据轮播(Data Carousel)发送端软件设计
阅读量:5815 次
发布时间:2019-06-18

本文共 5504 字,大约阅读时间需要 18 分钟。

       0 引言
        随着数字技术、网络技术和多媒体技术的发展,广播电视系统正在向全面数字化的方向发展,数字化后的广播电视网络不仅可以传输视频、音频等信息,而且还可以传输包括图像、文字、数据等各种信息在内的多媒体综合信息,这类广播业务与音视频节目毫无关系,是数字电视广播的新应用。2004年3月,国家广电总局发布了《数字电视系统中的数据广播规范》(GY/T 201-2004)[1],根据不同的应用类型定义了五种数据封装格式,分别是数据管道、数据流、多协议封装、数据轮播和对象轮播。本文利用该标准中数据轮播(DC, Data Carousel)的数据封装方法,实现了对天气预报、交通信息、股票信息等数据信息的广播。
       
1 数据轮播基本原理
        数据轮播是一种支持服务器端周期性地传输数据模块到用户端的数据广播业务。其中的数据模块是重复循环广播的,如果客户端希望接收数据轮播中的特定或指定模块,只需要在该模块广播时接收即可。
       
1.1 数据轮播标准
        我国在制订数据轮播标准时,主要采用了欧洲的DVB(Digital Video Broadcasting)标准[2-5]。在DVB规范中,信源部分采用的是MPEG-2国际标准[6],MPEG-2在系统层详细定义了音视频数据的传输方法[7],同时简单定义了非音视频数据的传输方法。ISO/IEC13818-6[8]数字存储媒体的命令和控制(DSM-CC, Digital Storage Media Command & Control)是数据广播的重要基础。
       
1.2 数据轮播中数据的组织方式
        数据轮播规范规定了数据从发送端到接收端的循环传输方法。同一个数据轮播中的数据是以模块(Module)的形式组织的,模块是已知大小的,模块又被分成数据块(Block)。如果业务需要,模块可以组成一个模块群(Group),多个模块群还可以组成超群(Super Group)。
       
1.3 数据轮播中的四种信息
         在数据轮播标准中,采用了DSM-CC规范中的四种信息:(1) 下载数据块消息DDB (DownloadDataBlock);(2) 下载指示消息DII(DownloadInfoIndication);(3) 下载服务器初始化消息DSI(DownloadServerInitiate);(4) 下载取消消息DownloadCancel。其中,需要传输的数据封装在DDB中,控制信息封装在DSI、DII和DownloadCancel中。在DSI消息中,主要描述一个超群中一个或多个群的信息,这些信息包括组成超群的群的数目(NumberOfGroups)、每个群的群号(group_id),群的大小(group_size),还可以描述每个群的属性,比如采用Name_descriptor进行群的名字描述等等。在DII消息中,主要描述一个群中一个或多个模块的信息。包括该模块群中传输的数据块的大小(blockSize),该群中模块的个数(NumberOfModules),同时逐个描述该群中每个模块的信息,模块信息主要包括模块号(Module_id),模块的大小(module_size)以及模块的版本号(module_version),另外,在模块信息中(moduleInfobyte)还可以采用描述子对模块属性进行描述。
       
1.4 数据轮播中数据的三次封装
        (1) 将轮播数据存入DDB消息的负载中,相应的控制信息放入DII和DSI消息中;
        (2) 将上一步获得的DDB、DII和DSI消息按照DSM-CC section的封装规范进行封装;
        (3) 将得到的DSM-CC表按照MPEG-2中对private section的处理方法封装成TS流。
        经过这三次封装,轮播数据就可以在数据广播网络中传输了。
       
1.5 数据轮播的结构
        数据轮播中有两种基本结构:一层的数据轮播和两层的数据轮播。一层数据轮播拥有一个控制层DII,该控制层描述了单个群。当需要两层控制信息时,DSI消息用于描述超群中的不同的群,DSI消息的用途和单层数据轮播中的用途一样。在本设计中采用一层的数据轮播结构。
       
2 软件设计
        本软件主要分为以下几个部分:用户界面部分,SI信息表生成部分,数据模块封装部分,控制信息生成部分以及TS流封装部分。它们的具体结构如图1所示。
图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.

作者:天津大学电子信息工程学院 何宇清、王成优

转载于:https://www.cnblogs.com/liunx/archive/2011/10/26/2225208.html

你可能感兴趣的文章
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
#HTTP协议学习# (二)基本认证
查看>>
Android开发之线性布局详解(布局权重)
查看>>
WCF
查看>>
django 目录结构修改
查看>>
win8 关闭防火墙
查看>>
Android实例-录音与回放(播放MP3)(XE8+小米2)
查看>>
CSS——(2)与标准流盒模型
查看>>
MYSQL 基本SQL语句
查看>>
C#中的Marshal
查看>>
linux命令:ls
查看>>
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
shell编程笔记六:实现ll命令
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
[nodejs] nodejs开发个人博客(五)分配数据
查看>>
《Linux内核修炼之道》 之 高效学习Linux内核
查看>>
Java数据持久层框架 MyBatis之API学习九(SQL语句构建器详解)
查看>>