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


 

MHP 对象轮播HTML应用解析与实现相关推荐

  1. 【前端2】js:原始类型,运算符,调试,页面加载,轮播图,Bom(对象,时钟),Dom(全选全不选,省市级联,隔行/触摸换色,表单校验)

    文章目录 1.js两种引入:js最终要引入到html在浏览器中运行 2.js五大原始类型:undefined 3.js的运算符和流程控制:js不支持单&和单|性能低 4.案例_99乘法表:So ...

  2. bootstrap中轮播图、模态框、提示框/弹出框、滚动监听、弹性布局、响应式flex、多媒体对象

    轮播图: bootstrap封装了轮播图的功能,其具体如下: 类名 描述 .carousel 创建一个轮播图块的容器,实质是做布局用:且此容器应该有一个di属性,其属性值提供给下面左右按钮href锚点 ...

  3. 技术解析:如何用pyecharts绘制时间轮播图

    在前天的文章『用python制作动态图表看全球疫情变化趋势』中,由于篇幅原因,在数据处理与数据可视化相关内容上我们只是简单带过,那么我将以python小小白的角度去还原如何处理数据与数据可视化.本文为 ...

  4. JS-内置对象内置构造函数事件-拖拽轮播图无缝滚动

    内置对象&内置构造函数 日期时间格式 // 创建一个当前时刻的日期时间对象 var date = new Date(); // 获取date对象中的年月日时分秒 var y = date.ge ...

  5. 【前端学习-16】【day06】WebAPI编程/动画函数封装/回调函数/轮播图/自动播放/节流阀/返回顶部/筋斗云/触屏事件/触屏事件对象/

    新增动画前进后退效果 案例:轮播图 1.显示隐藏功能 2.动态生成小圆圈 3.排他思想 4.开始滚动 5.右侧按钮 6.克隆第一张图片 7.小圆圈跟着右侧按钮变化 8.序号和点击的要统一 9.左侧代码 ...

  6. 02-vue(轮播图,v-bind对象用法,v-for指令,v-if指令,v-else-if,v-else指令,key值的基本使用,v-show指令,英雄搜索案例)

    01-作业-轮播图 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  7. html垂直居中走马灯,史上最全解析:4种方法制作-PPT跑马灯/走马灯图片轮播动画...

    本期要点:全面解析不同场景下的跑马灯PPT图片动画 技巧概要:动画精准衔接 路径起点终点位置 插件提高效率 图文编辑:幻云PPT设计 大雄董军 比如我们今天要讲的跑马灯动画 跑马灯动画其实是根据咱们传 ...

  8. JAVA轮播器_Android 图片轮播器的实现及源码解析

    在很多产品,尤其是电商类社区内的网页或者app中,我们经常会看到一个图片轮播墙,一页一页的广告/活动/商品介绍每隔一段时间就切换到下一张.那在安卓中我们该如何实现图片轮播器呢?面对自定义样式.自定义图 ...

  9. html5carousel图片轮播,全面解析Bootstrap中Carousel轮播的使用方法

    本文实例为大家全面的解析了Bootstrap中Carousel的使用方法,供大家参考,具体内容如下 源码文件: Carousel.scss Carousel.js 实现原理: 隐藏所有要显示的元素,然 ...

最新文章

  1. java 之 面向对象
  2. rtcp 实时传输控制协议 简介
  3. java禁止ie后退_Java开发网 - 【讨论】html页面禁用右键,浏览器后退、刷新,以及相应快捷键...
  4. WCF传输大数据的设置
  5. 链表(单链表、双链表、内核链表)
  6. C# 使用TcpClient 测试网络连接是否正常
  7. 基坑监测日报模板_深基坑又出事,广西工地 10m深 基坑坍塌,4名钢筋工被埋,3人遇难!...
  8. Eclipse Android开发环境搭建
  9. OneNote中快速笔记怎么打开和删除
  10. 微信小程序中如何有效的修改app.js中全局变量的值,并能在页面中进行动态响应
  11. 数据库cosc2406-2407辅导week10-quiz-Transactions and Concurrency
  12. 《炬丰科技-半导体工艺》薄晶圆处理挑战和新兴解决方案
  13. 可以借助Studio Display 实现旧款Macbook上的“Hey Siri”功能
  14. 【视频转gif】视频文件转成 .gif,在线且免费
  15. JavaScript实现蜘蛛纸牌
  16. ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supp
  17. 列车售票系统源代码c语言,火车站售票查询系统 C语言 源代码
  18. Effective C++条款09:绝不在构造和析构过程中调用virtual函数
  19. 【论文笔记】DEEP FEATURE SELECTION-AND-FUSION FOR RGB-D SEMANTIC SEGMENTATION
  20. 程序员年底跳槽必备!自动生成10+种简历模板,总有一个适合你

热门文章

  1. Android Wear开发浅析(一)
  2. windows server 2008搭建nfs共享服务
  3. 机器学习及人工智能发展史
  4. 必然与偶然,本质与细节
  5. 配置容错组件 Sentinel(五)
  6. visionman-康耐视智能相机Insight视觉课程大纲(0718更新,永久更新)
  7. coder,你会设计交易系统吗(实干篇)?
  8. IDEA向前向后箭头,左右箭头如何设置
  9. html 获取登录状态,登录后如何获取HTML代码?
  10. python学费12306_python【练手】12306查票