MPEG-2 Transport Stream在协议栈(Protocol Stack)中的角色没有任何DSM-CC messages或是接口可以在MPEG-2传输流中传输。然而,如果要用MPEG-2传输流传输DSM-CC 协议,那么在这一章节中提到的section就会被用到。 MPEG-2系统,ISO/IEC 13818-1定义了一套private_section(私有表)结构,可以将DSM-CC的messages(Download Control Message 或 Download Data Message,例如DII,DSI,DDB)封装成私有表(private_section)的形式,然后进行packet化,这样就块可以在MPEG-2的传输流中进行传输。本协议对private_section定义了额外的文法来满足额外的DSM-CC的需求,这种私有表称为DSM-CC Section,它的文法结构和private_section兼容,所以可以用MPEG-2的解码器对其解码。 DSM-CC Sections当DSM-CC U-N(User-Network)和Download messages需要被封装成MPEG-2的传输流时,就需要用到DSMCC section的语法结构。其他数据净荷(payload)也许也会用到这种结构。这种结构继承自在13818-1中定义的private_section,在对DSM-CC_section header进行编码的时候某些字段会有特殊的语义。如何将DSMCC Section映射成MPEG-2 Packets和DSMCC Section的最大长度都在ISO/IEC 13818-1的Private_section中介绍。 在某写编码实现中,在Private_section中使用CRC_32是比较理想的。由于很多系统对于CRC_32的计算很有难度,DSMCC_section语法提供了CRC_32的一个替代品。为了和13818-1一致,如果section_syntax_indicator被赋为1,就会使用CRC_32这种方式,但是如果section_syntax_indicator被赋为0,除了CRC32字段被替代为checksum字段外,其他字段在和section_syntax_indicator被赋为1的情况没下没有任何差别。所以还是兼容13818-1,因为紧跟着section_length字段后面的数据都被视为私有数据(private data)。 因为section_syntax_indicator字段可能会出错,private_indicator字段必须设置为section_syntax_indicator的反码,如果section_syntax_indicator为0,那么private_indicator必须置为1,如果不是这样,这个section就是一个错误的section。类似的,如果section_syntax_indicator为1,则private_indicator为0。 当section_syntax_indicator被设为0(不用CRC)并且checksum字段也被设为0,在其他层会提供一个错误检测,这种需求是强制的(请参考表9-1和download transport protocol requirements)。 对于MPEG2 传输流更多的与private_section相关的文法和语义,请参照ISO/IEC 13818-1,第2.4.4节 Program Specific information,会包括设置payload_unit_start_indicator,TS流净荷中point_field的设置,以及packet中填充字段的用法。 除非特别指定,DSM-CC tables(拥有相同table id的一个或多个DSM CC sections)会被相同数值的PID的packets所承载,这点和其他private_sections(例如,13818-1将它们的stream type指定为0×05)一样。 DSMCC-CC Section Format
DSMCC Section各字段的语义table_id:占8位,标识了DSMCC Section净荷中的数据的类型,该字段定义了table_id_extension,version_number,section_number和last_section_number这些字段的编码规则。 下表包括DSMCC table_id的赋值。
Multi-protocol encapsulated 数据也许包括U-U RPCs section_syntax_indicator:占1bit的字段,当设为‘1’代表校验使用CRC32字段,当设为‘0’代表使用checksum字段。 private_indicator:占1bit的字段,将被设置为section_syntax_indicator的反码。 reserved:设为‘11’ dsmcc_section_length:这个占位为12bit的字段指示了紧跟在该字段后面的DSMCC Section的剩余的字节数,该值不能超过4093 table_id_extension:16位的字段,如果table_id的值为0×3B,该字段的值为dsmccMessageHeader中transaction_id字段的低2个字节;如果table_id的值为0×3C,该字段的值为DownloadDataBlock或DownloadResponse中的moduleId的值。如果既不是0×3C也不是0×3B,则该值由用户所定义。 version_number:这是个5bit的字段,如果table_id的值为0×3A或0×3B,该字段设为0;如果table_id为0×3C并且是DownloadData Message,该字段将会赋于DDB Message中moduleVersion字段的低5位的值;如果table_id的值为0×3C并且是DownloadData Response Message,该字段需被设为0。如果table_id字段不是0×3A到0×3C中的值,该字段的值由用户所定义。 current_next_indicator:这是一个1bit的flag,如果table_id的值在0×3A到0×3C范围内,该位被设为‘1’,其他的情况由用户定义。 section_number:这是一个8bit的字段,如果table_id的值等于0×3A或0×3B,该字段将为0;如果table_id的值为0×3C,该字段的值将等于DDB或DDR message的moduleNumber字段最低8bit的值。其他的由用户去定义。 CRC32:在ISO/IEC 13818-1 附录B中定义。 checksum: DSMCC Stream TypesDSMCC定义了不同的stream_type值,PMT的es_info_loop中有用到stream_type字段,dsmcc section的stream_type描述如下: 下表包括了DSMCC stream type的赋值:
下面一些限制:
|