MHP 对象轮播HTML应用解析与实现
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应用解析与实现相关推荐
- 【前端2】js:原始类型,运算符,调试,页面加载,轮播图,Bom(对象,时钟),Dom(全选全不选,省市级联,隔行/触摸换色,表单校验)
文章目录 1.js两种引入:js最终要引入到html在浏览器中运行 2.js五大原始类型:undefined 3.js的运算符和流程控制:js不支持单&和单|性能低 4.案例_99乘法表:So ...
- bootstrap中轮播图、模态框、提示框/弹出框、滚动监听、弹性布局、响应式flex、多媒体对象
轮播图: bootstrap封装了轮播图的功能,其具体如下: 类名 描述 .carousel 创建一个轮播图块的容器,实质是做布局用:且此容器应该有一个di属性,其属性值提供给下面左右按钮href锚点 ...
- 技术解析:如何用pyecharts绘制时间轮播图
在前天的文章『用python制作动态图表看全球疫情变化趋势』中,由于篇幅原因,在数据处理与数据可视化相关内容上我们只是简单带过,那么我将以python小小白的角度去还原如何处理数据与数据可视化.本文为 ...
- JS-内置对象内置构造函数事件-拖拽轮播图无缝滚动
内置对象&内置构造函数 日期时间格式 // 创建一个当前时刻的日期时间对象 var date = new Date(); // 获取date对象中的年月日时分秒 var y = date.ge ...
- 【前端学习-16】【day06】WebAPI编程/动画函数封装/回调函数/轮播图/自动播放/节流阀/返回顶部/筋斗云/触屏事件/触屏事件对象/
新增动画前进后退效果 案例:轮播图 1.显示隐藏功能 2.动态生成小圆圈 3.排他思想 4.开始滚动 5.右侧按钮 6.克隆第一张图片 7.小圆圈跟着右侧按钮变化 8.序号和点击的要统一 9.左侧代码 ...
- 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=" ...
- html垂直居中走马灯,史上最全解析:4种方法制作-PPT跑马灯/走马灯图片轮播动画...
本期要点:全面解析不同场景下的跑马灯PPT图片动画 技巧概要:动画精准衔接 路径起点终点位置 插件提高效率 图文编辑:幻云PPT设计 大雄董军 比如我们今天要讲的跑马灯动画 跑马灯动画其实是根据咱们传 ...
- JAVA轮播器_Android 图片轮播器的实现及源码解析
在很多产品,尤其是电商类社区内的网页或者app中,我们经常会看到一个图片轮播墙,一页一页的广告/活动/商品介绍每隔一段时间就切换到下一张.那在安卓中我们该如何实现图片轮播器呢?面对自定义样式.自定义图 ...
- html5carousel图片轮播,全面解析Bootstrap中Carousel轮播的使用方法
本文实例为大家全面的解析了Bootstrap中Carousel的使用方法,供大家参考,具体内容如下 源码文件: Carousel.scss Carousel.js 实现原理: 隐藏所有要显示的元素,然 ...
最新文章
- java 之 面向对象
- rtcp 实时传输控制协议 简介
- java禁止ie后退_Java开发网 - 【讨论】html页面禁用右键,浏览器后退、刷新,以及相应快捷键...
- WCF传输大数据的设置
- 链表(单链表、双链表、内核链表)
- C# 使用TcpClient 测试网络连接是否正常
- 基坑监测日报模板_深基坑又出事,广西工地 10m深 基坑坍塌,4名钢筋工被埋,3人遇难!...
- Eclipse Android开发环境搭建
- OneNote中快速笔记怎么打开和删除
- 微信小程序中如何有效的修改app.js中全局变量的值,并能在页面中进行动态响应
- 数据库cosc2406-2407辅导week10-quiz-Transactions and Concurrency
- 《炬丰科技-半导体工艺》薄晶圆处理挑战和新兴解决方案
- 可以借助Studio Display 实现旧款Macbook上的“Hey Siri”功能
- 【视频转gif】视频文件转成 .gif,在线且免费
- JavaScript实现蜘蛛纸牌
- ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supp
- 列车售票系统源代码c语言,火车站售票查询系统 C语言 源代码
- Effective C++条款09:绝不在构造和析构过程中调用virtual函数
- 【论文笔记】DEEP FEATURE SELECTION-AND-FUSION FOR RGB-D SEMANTIC SEGMENTATION
- 程序员年底跳槽必备!自动生成10+种简历模板,总有一个适合你