1、2.3.1.1 DownloadServerInitiate (DSI)消息 DownloadServerInitiate 消息用来建立超组,描述超组内组的内容,表?是它的语 法定义。 表 1 数据滚动的 DownloadServerInitiate 语法定义 语 法 字节数 系统赋值 (AVIT 赋值) DownloadServerInitiate() DsmccMessageHeader() ProtocolDiscriminator 1 0x11 DsmccType 1 0x03 MessageId 2 0x1006 TransactionId 4 变化 Reserved 1 0xFF
2、AdaptationLength 1 0x00 (无适配域) MessageLength 2 if(adaptationLength0) DSMCCAdaptationHeader() 无 ServerId 20 0xFF (共 20Byte)CompatibilityDescriptor() 2 0x0000 PrivateDataLength 2GroupInfoIndication() NumberOfGroups 2 for(i=0; i0) DSMCCAdaptationHeader() 无 DownloadId 4 BlockSize(每个数据块的大小) 2 WindowSize?
3、thh 1 0x0 AckPeriod 1 0x0 TCDownloadWindow 4 0x00000000 TCDownloadScenario 4 CompatibilityDescriptor() 2 0x0000 NumberOfModules 2 for(i=0;I0) DSMCCAdaptationHeader() 无 ModuleId 2 ModuleVersion 1 Reserved 1 0xFF BlockNumber 2 for(i=0;IN;I+) blockDataByte 1 说明: DownloadId:用来联系一个具体下载过程中下载数据消息和下载控制消息的代号
4、。 MessageLength:消息在此以下的字节数。 moduleId: 指示数据块所属的模块代码。/同一个文件的 DDB 的这个属性都相同。 ModuleVersion:表示所属模块的版本号。 BlockNumber:数据块在模块中的位置,从 0 开始连续递增计数。 BlockDataByte:包含当前数据块的数据内容。2.3.1.4 DSM-CC 消息在 MPEG-2 Section 中的封装 当 DSM-CC 下载消息以遵循 DSMCC_section 语法作封装,DSMCC_section 再遵循 MPEG-2 TS 流语法被打包。 DSMCC_section 的结构实际上都是从 I
5、SO/IEC 13818-1 中的 Private_section 继承而来, 只是在 DSMCC_section 头结构中特别字域的编码上赋予了特殊语意。它的结构是与 private_section 语法兼容的,因此可以使用 MPEG-2 系统解码器处理 DSMCC_section。DSMCC_section 到 MPEG-2 传输流包的转换以及 DSMCC_section 的最 大长度均由 ISO/IEC 13818-1 定义的 Private_sections 确定。 可以参考 ISO/IEC 13818-1 2.4.4 节 PSI 关于 private_sections 的结构和定义,
6、包括 payload_unit_start_indicator 的设置,传输包 payload 中 pointer_field 的使用,以及包的填充 字节的讨论。系统仅规定 DSM-CC 表的 table_id ,对 PID 值不作规定。 表?是 DSM-CC 的 Section 语法定义。 表 4 数据滚动的 DSMCC_Section 语法定义 句 法 比特数 系统赋值 (AVIT 赋值) 表达方式 DSMCC_section() table_id 8 0x3B(DSI或DII) 或0x3C(DDB) Uimsbf section_syntax_indicator 1 0x1 Bslbf
7、private_indicator 1 0x1 Bslbf Reserved 2 0x3 Bslbf DSMCC_section_length 12 Uimsbf table_id_extension 16 DDB中的ModuleId /DSI ,DII中的 transaction_ Uimsbf Reserved 2 0x3 Bslbf version_number 5 Uimsbf current_next_indicator 1 1或0 Bslbf section_number 8 Uimsbf last_section_number 8 0xFFFFFFFF Uimsbf else i
8、f (table_id = 0x3B) 0xFFFFFFFF DSI() 或 DII() 0x3 else if (table_id = 0x3C) DDB () CRC_32 32 Rpchof 为方便快速硬件过滤的实现,DVB 数据滚动对其下载消息的部分特征字段进行了提取, 对应到 DSMCC_section 的前几个字节。DSMCC_section 的相关字段定义如表?所示:表 5 数据滚动的 DSMCC_section 字段定义 消息 table_id table_id_extension version_number section_number last_section_number DSI 0x3B DSI 中 transaction_id 的最低两个字节 0x00 0x00 0x00 DII 0X3B DII 中 transaction_id 的最低两个字节 0x00 0x00 0x00 DDB 0X3C ModuleId ModuleVersion %32 BlockNumber %256 为原 section 含义, 表示最大的 section_number 可见,描述一个超组的 DSI 和一个组的 DII 都只能用 section 表示;而 DDB 可用多个 section 表示,每个 section 表示一个数据块(block) 。