OC是一种特殊的TS流,该流中主要由一些文件和应用组成,按照国际OC打包方式,打包成OC流后,放在前端轮播,So,名字叫做DSMCC_OC.
语法官方定义:
- DSM-CC Digital Storage Media-Command & Control (数字存储媒体命令和控制)
- OC Object Carousel(对象轮播)
- DSI DownloadServerInitiate message of DSM-OC(下载服务初始化消息)
- DII DownloadInfoIndication message of DSM-CC(下载信息指示消息)
- DDB DownloadDataBlock message of DSM-CC(下载数据块消息)
DSMCC数据格式:
左图为一层的数据轮播,右图为多级数据轮播
mi:ModuleInfoBytes
如图所示,数据被存在了Module中,每个Module被分成若干个block。Module信息主要是在DII中描述,每个module拥有唯一的moduleID。
数据关联:
1.通过filter过滤得到table_id:0x02的pmt数据后,经解析得到Stream_type为0x0b的pmt_pid.根据此pid和对应的ComponentTag,可以直接解析DSI, DII信息。
2. DSI:下载服务初始化消息,用于描述超群中的不同的群,也就意味这描述多层轮播中的根轮播。主要数据就是transaction_id,该字段指明根目录的DII信息所在。
3. DII:下载信息指示消息,用于描述当前群中的所有的Module信息。主要数据就是moduleId,moduleSize,moduleVersion,moduleLink;//其中moduleLink可以表明该文件是否是一个大文件。
4.ModuleInfoBytes:一个ModuleId所指向的Module数据,一个ModuleID有多个DDB组成,即多个Block组成。如实际的section的对应关系即为:一个ModuleID有多个section组成,一个section又由多个DDB组成。moduleSize在接收DDB信息的时候起着决定性的作用。
文件在OC流中的概念:
一个文件最终存放在Module中,而一个Module可以存放一个或多个文件。当文件超过1MB的时候,将会被打包成为一个大文件,即有多个moduleId。
小文件的下载只需要下载当前ModuleId所在的ModuleInfo,然后通过读取偏移量找到该文件在ModuleInfo中的位置,及大小,最好保存。
大文件的下载,则需要从起始ModuleId开始,可以选择逐个下载,或者随机下载。最后通过moduleLink和moduleSize排列顺序,并保存。