【DVB】DSM-CC OC搜索、解析和接收流程

DSM-CC OC搜索、解析和接收流程

规范性示例

1、DVB行业术语

1.1 PAT

Program Association Table

节目关联表

1.2 PMT

Program Map Table

节目映射表

1.3 SDT

Service Description Table

业务描述表

1.4 DII

Download Info Indication

下载信息提示

1.5 DSI

Download Server Initiate

下载服务器初始化

1.6 DIR

Directory Message

目录消息

1.7 DDB

Download Data Block

下载数据块

1.8 DSM-CC

Digital StorageMedia-Command and Control

数字存储媒体-命令及控制

1.8 DSM-CCOC

Digital StorageMedia-Command and Control-Object Carousel

数字存储媒体-命令及控制-对象轮播

1.9 PSI

Program Specifie Information

节目特定信息

1.9 SI

Service Information

业务信息

2、DSM-CC OC节目搜索

2.1 PAT表

       PAT是DVB中非常重要的一个PSI表,用来描述节目特定信息。PAT是搜索节目的入口。具体运营中,为了支持一个传输流里包含多个并且类型不同的频道应用,必须使用PAT描述这些节目的编号标识(serviceId)及对应PMT(节目映射表)所在的传输流包的PID。

       终端搜索节目时,可以快速的接收PAT(也就对PAT表的传输周期有要求)就可确定传输流中存在有哪些节目及这些节目映射表所在传输流包。

图1  PAT表范例

2.2 PMT表

    PMT也是DVB中非常重要的一个PSI表,用来描述一个节目编号与一个节目元素之间的映射关系,PMT里提供有多个这样的描述。可以说PMT是传输流里的所有节目的收集器,通过PMT就可以定位特定节目。

终端接收到PAT 表后,根据解析PAT里所有的节目编号和节目映射表所在传输流包的PID,来接收对应的PMT。

PMT里有一个Elementary Stream Loop,分别对Stream Type为0x05和Stream Type为0x0b两个Elementary Stream进行描述。前者描述AIT Stream,除了有Steam Identifier描述符,还存在有一个Application Signalling描述符指定AIT Stream;后者描述DSM-CC Stream,存在有Steam Identifier描述符用来定位OC数据。根据PMT里是否存在由0x0b这个描述可以确定该节目是否为OC。

根据PAT里的描述的所有的PMT PID,然后接收并解析所有PMT里的Stream,就可以获得所有类型(数据广播、数字电视广播、数字音频广播、文字电视广播、MHP应用)的节目列表。

图2  含有音频广播的PMT表范例

图3  纯数据广播的PMT表范例

2.3 SDT ACTUAL表

当需要显示本频点下节目表的详细信息,比如节目名称时,需要接收SDT ACTUAL表。SDT ACTUAL表里有descriptor_tag=0x48的service_descriptor,该描述里有节目类型、节目提供者名称和节目名称(可支持中文)。通过在SDT里所有的节目描述信息可以在机顶盒上显示完整的各类节目的类型和名称列表。

图4  SDT表范例

2.4 Service Type

一个传输流里可能包含数据广播、数字电视广播、数字音频广播、文字电视广播、MHP应用等众多频道应用,每个节目的类型在DVB规范里有明确的定义。一个纯OC的数据广播应用节目类型为0x0C。

3、DSM-CC OC的接收和解析

3.1 AIT表

       当在节目列表里指定一个OC的节目启动时,象在2.2里一样接收到该节目的节目映射表PMT,根据在Stream Type为0x05的Elementary Stream描述可以得到对应的应用信息表AIT的PID,然后根据该PID并且tableId=0x74来接收AIT。AIT里有descriptor_tag为0x09的DVB-HTML applicationlocation descriptor的描述,该描述里指定了OC启动的默认页面。

图5  AIT表范例

3.2 DSI

根据PMT里Stream Type为0x0b的Elementary Stream描述,可以得到DSM-CC的PID和ComponentTag。根据这个DSM-CC OC PID接收tableId为0x3b的并且table_id_extension为0x0000的DSM-CC U-N Message(DSI)。DSI里有一个BIOP:ServiceGateInfo()/IOP::IOR()/BIOPProfileBody()/DSM::ConnBinder()/

DSM::Tap()子结构体,该子结构体里又存在有一个selector()的子结构,其中存在有一个transactionId,该字段值标识了引用的DII(p150)。

3.3 DII

       也是根据PMT里Stream Type为0x0b的Elementary Stream描述,可以得到DSM-CC的PID和ComponentTag。根据这个DSM-CC OC PID接收tableId为0x3b的并且table_id_extension等于引用的DSI的transactionId的DSM-CC U-N Message(DII)。因为只是messageId不同,所以DSI和DII是可以同步接收的。DII的DsmccMessageHeader结构体中有一个downloadId字段,该字段与对应的DSI引用selector()结构体里的transactionId一致。

3.4 DIR DDB

       也是根据PMT里Stream Type为0x0b的Elementary Stream描述,可以得到DSM-CC OC的PID和ComponentTag。根据这个DSM-CC OC PID和DSI里描述的transactionId,接收tableId为0x3c的DSM-CC U-U Message,假如这个Message里的MessageSubHeader结构体的dirObjectKind_data为0x64697200,即目录DDB。目录DDB用来描述应用的目录信息及描述目录/文件所在的module。

3.5 文件DDB

       根据在3.1里指定的节目默认启动文件,在DIR DDBDirectoryMessageBody里结构体及子结构IOP:IOR()里找到这个文件以及这个文件所在的transactionIdmoduleIdcarouselId及它的objectKey然后根据PMT里描述的DSM-CC OC PID及transactionId、moduleId和carouselId接收真正承载文件数据的module,这些module接收完后,然后在这些module里使用objectKey定位到具体的文件,这样所需要的启动文件就可以这样接收下来并可提供解析和显示了。

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值