您的位置:首页 > Web前端 > HTML

MHP 对象轮播HTML应用解析与实现

2013-07-18 11:30 253 查看

MHP 对象轮播HTML应用解析与实现

提要:本文以一个具体的DVB数据广播应用例子,介绍了如何从DVB广播中获取应用数据。

1.DVB的OC
对象传送

DVB MHP标准中将对象轮播作为其传输标准,一个DVB对象轮播代表一个由DSM-CC U-U对象集合而成的特殊服务,对象传输使用目录对象、文件对象和流对象,对象传输方式是将一组结构化的对象进行周期性地广播,它使服务器端向终端用户传递一组结构化数据变得十分方便。

2.对象轮播中的DSM-CC消息
DVB的对象轮播,是建立在DSM-CC对象轮播基础之上的。他们通过DSM-CC消息来实现,每个消息都被封装成一个Section段,通过MPEG-2的私有数据段来传输,每个消息有消息头(DSM-CC
Messsage Header),在消息头中,包含着消息类型(dsmccType)、消息ID(messageID)、事务ID(transactionID)等字段,这些字段构成了消息的描述信息。对象轮播主要使用DSM-CC下载消息(DownloadMessage)。

主要使用的消息分类:见表一

消息通过table_id字段被分为下载控制消息Download Control Message
(table_id值为0x3b)和下载数据消息Download
Data Message(table_id值为0x3c)。

下载控制消息Download Control Message包括:

l
DSI消息:messageID 的值为0x1006,接收端首先需要接收DSI消息来确定下载服务的位置等信息,在对象轮播中DSI消息中会指明业务网关对象(Service
Gateway Object)。它作为整个对象轮播的下载入口。

l
DII消息:messageID的值为0x1002,描述了模块(module)的寻址和定位。模块(moudle)是由多个块聚合而成,每个模块最多包含256个块(block),在同一个下载服务中,moudleID是模块的唯一标识,具有相同moudleID的块(block)共同构成了这个模块(moudle)。

l
DC消息:messageID的值为0x1005,通过此消息中的downloadID和moduleID,服务器端通知接收端终止由这两个字段确定的模块的下载。

下载数据消息Download Data Message:

l
DDB消息:下载数据块消息,构成了数据下载中的一个个数据块(Block),每个DDB消息都含有moudleID,用来表示这个数据块是属于哪一个模块的。一个模块最多可以有256个数据块。

3.对象轮播中使用的对象:
在DVB的对象轮播过程中,使用了一系列对象来表示所传送数据的层次关系。它包括:

(1)
业务网关对象(Service Gateway Object).

(2)
目录对象(Directory Object).

(3)
文件对象(File Object).

(4)
流对象(Stream Object).

(5)
流事件对象(Stream Event Object).

在对象轮播中。服务器按照一定的方式循环的发送这些对象。而接收端接收到这些对象之后,从对象中还原数据,并恢复数据之间的层次结构。DSM-CC标准中规定了对象的语法结构以及封装的方式,每个对象都统一按照BIOP(Broadcast Inter ORB Protocol)消息的方式,被封装到一个BIOP消息中。BIOP消息分为消息头(Message
Header)、子消息头(Message SubHeader)和通用对象消息(Generic Object Message)三个部分。在消息头中包含BIOP消息的长度、同步字节等数据。在子消息头中包含被封装的对象的类型(Object
Kind)和键值(Object Key)字段。Object Kind用来表示对象的类型,而Object Key可以在一个对象轮播集中唯一地标识这个对象。通用对象消息中包含的是对象的数据,它根据对象种类的不同而有所区别。

l 目录对象

简称DIR对象。在对象轮播中,它的作用是描述绑定在该目录下面的对象的信息。就像电脑上的文件夹,一个目录(也就是文件夹)下面可以包含多个文件和子目录(子文件夹),每一个子目录又可以包含多个文件和更低一级的子目录。这种目录和文件、子目录的包含关系,在DIR对象中被描述为绑定(Binding)。在DIR对象中会标明该目录所包含的绑定个数,一个绑定对应一个文件或子文件夹。每个绑定由名称(Binding
Name)、类型(Binding Type)、对象参考(Object Reference)来描述,接收端通过 Binding Type来判断所绑定的是文件夹还是文件,通过Binding
Name来为所绑定的文件或文件夹命名,通过对象参考从TS流中正确地找到这个对象的数据。

l 业务网关对象

OC中的业务网关对象,简称SRG对象。它的语法结构和DIR对象完全一致,唯一不同的是对象的类型字段是SRG而不是DIR。如果把一组要下载的数据看成一个业务域,那么业务网关就是这个业务域的唯一入口,对于接收端来说,只有通过访问业务网关才能获得业务域内数据的组织结构的信息。因此,抽象地来说,一个业务网关就相当于一个顶层的文件夹,通过访问这个顶层文件夹,我们可以进而访问绑定在这个顶层文件夹下的子文件夹和文件。从这个意义上来说SRG对象和DIR对象本质上是一样的。

l 文件对象

OC中的文件对象,简称FIL对象。一个FIL对象包含传送的一个文件,因此FIL对象中没有绑定信息,也没有对象参考(Object
Reference),它的有效负载部分只包含文件的全部数据。

l 流对象和流事件对象

OC中的流对象简称STR对象,流事件对象简称STE对象。STR对象的作用是当一个数据广播业务中2中多个PID的时候,使用STR对象来指定某一路基本流(ES.Elementary
Stresm)PID或是某一套节目。STE对象会指示传送DSM-CC流描述子(Dsmcc Stream Descriptor)的是哪一个PID,并为事件设置事件ID(eventide)。

由此可以看出,DSM-CC对象轮播在支持文件、目录对象和流对象的传输是不同的,它对于传输的目录和文件对象,其内容是包含在对象中的。而流对象则是其它流的参考基准。

模块(module):它是对象轮播(OC)中BIOP消息的容器,每个模块可以包含一个或多个BIOP消息。见表2。

4.块、模块、对象的组成:
块、模块、对象的组成关系如下表3:

表3

5.数字北京的解析过程:
首先,解析下载消息下载消息DownloadMessage

下面是634频点数字北京的解析过程(截图来自Ares-C2.2):

(1)
解析DSM-CC DSI消息,获取业务网关信息,见图1:

模块描述在这里

MessageID = 0x1002

DSI 所在的Section

TID = 0x3b

MessageID = 0x1006

DSI 所在的Section

TID = 0x3b

MessageID = 0x1006

图1

根据table_id及messageID得到DSI,在DSI的privateDataByte中包含的业务网关IOR。

privateData包含业务网关数据。

图2

ModuleID

ObjectKey

图3
(2)
解析DSM-CC DII消息,获取模块描述,见图1、图4

图4
numberOfModules为模块个数,moduleID为模块的ID号,moduleSize为模块大小。

(3)
解析DSM-CC DDB消息,获取模块数据

DDB消息的有效载荷为一个块(Block),块中相同moudleID及版本的块构成一个模块(Module)见图5,根据last_section_number可知当前模块含有的块数。

图5

(4)
通过业务网关获取根路径。

解析业务网关IOR得到指向业务网关根路径模块的ID号,moduleID为0x0000,解析IOR包含的BIOP
Profile Body, 得到objectKey为0xC072BE03,见图2,图3。

(5)
解析递归解析根路径下的子目录

在解析出的modules中找到moduleID=0x0000的模块,在此模块中找到objectKey为0xC072BE03的BOIP消息,该消息中包含的对象就是业务根路径,数字北京的业务根路径名为BroadCastData。目录消息(DirectoryMessage)下的bindings_count给出了当前目录下绑定的目录及文件个数。递归解析下面的所有目录,每个目录对象都有一个IOR指向它的下一级对象。直到解析完毕。

(6)
处理所有子目录下的文件。

如果目录包含的是文件对象(NameComponent kind为fil),则该对象的有效载荷就是文件数据。

6.结论
对象轮播能够传送复杂的具有层次结构的数据,解析HTML应用,实现了解DVB数据广播的目的,为掌握MHP的其他应用奠定了一个入门基础,相信全面掌握DVB
MHP技术为时不远。

2007-04-23
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: