基于CMMB数据广播平台的数据接收程序设计
XPE包头有7个比特是保留的,在这里可以将它进行自定义以便传送不同服务类型的数据,其中2个比特用来标识数据的格式,如文本、图片、网页等,另外的5个比特则用来定义服务类型,具体定义方式如表1和表2所示。本文引用地址://m.amcfsurvey.com/article/156480.htm
2 解析数据广播业务数据的软件实现
解析数据广播业务数据主要就是解析复用帧码流。它的解析过程可分为以下几个模块:复用帧流提取、CRC检测、控制信息解复用、业务信息解复用。首先要对控制信息进行解复用,然后再根据控制信息中的关键信息来解析业务信息。
2.1 控制信息的解复用
解复用控制信息时首先要解析的是复用帧头,在这里可以定义一个结构体来保存相关的信息,同样的为了保存各个表的参数信息以便解复用业务信息时使用,将控制信息中的每个表和紧急广播也都对应地定义一个结构体,其中CMCT和SMCT的构造相同可共用一个结构体,CSCT和SSCT也可共用一个结构体。在结构体中定义好各个表对应的参数,在读取码流时,先保存复用帧头的相关参数信息,然后再保存控制信息表的信息,具体做法是根据表标识号来判断表的类型,确定类型后将码流里对应的参数存入到定义好的结构体参数中。然后对各表进行分析,最终获得频点编号、中心频率、复用帧所占用的时隙号以及子帧与业务ID之间的对应关系等信息,以方便用户接收所选的业务数据。
2.2 业务信息的解复用
业务信息处理模块如图4所示。首先是模块的初始化,这时读线程函数也被开启了,接着就进入了处理数据的循环,先判断业务数据是否处理完毕(这里定义了一个布尔变量来标记),如果处理完则将分类好的音视频数据和其他数据做相应的处理。如果未处理完毕,则读取下一个帧的数据,倘若此时没有数据则阻塞等待,直到有数据到来,接着对这一帧数据进行解复用,得到业务数据流,将数据归类,放在不同的缓冲区。
解析一个帧的数据步骤如下:
第一步:解析复用帧头。首先读取码流中的复用帧帧头,并将相关参数保存到已定义好的结构体中。
第二步:解析复用子帧。由于复用子帧的个数不止一个,所以可以用一个循环来处理,同业务数据处理的总框图类似,设置一个布尔变量来标识复用子帧是否处理完毕,先解析子帧的帧头,提取视频段、音频段和数据段数据,然后判断复用子帧是否处理完毕,如果处理完则跳出循环往下执行,如果没处理完则继续处理,处理完毕后提取出视频段、音频段和数据段数据。
第三步:解析视频段、音频段和数据段。由于采用的是数据广播来传送,因此这里只对数据段进行解析,先根据子帧头中的信息将数据段提取出来,这里数据单元的内容即为XPE包。
第四步:解析XPE包。仍然需要先解读包头信息,另外要注意的是首包包头还额外携带了数据包总长度,业务模式指示等信息,接到首包时要记录下来,然后根据包头信息对业务数据进行组装。
3 结论
经过以上对CMMB复用帧和XPE包结构的剖析,用VC++编写了解析数据广播业务数据的程序。实验输入测试用的是离线MFS流,接收显示了一些测试数据,该软件可以植入应用系统中来接收所需要的数据和图片,灵活方便,另外采用软件编写降低了硬件的成本,而且可扩展性强。
评论