Требования к параметрам протокола передачи сообщений DSM-CC П-С при инкапсуляции в транспортных потоках MPEG-2 и в программном потоке MPEG-2
Б.1 Сборка сообщения DSM-CC из пакетов транспортного потока MPEG-2 выполняется при использовании частной секции (private-section), структуру которой определяет ISO/IEC [3].
При использовании транспортного потока MPEG-2 для передачи сообщений протокола DSM-CC формирование пакета этих сообщений должно быть выполнено в соответствии с настоящим приложением.
Структура секций DSMCC_section должна быть совместима с синтаксисом секций private_section так, чтобы обеспечивать использование совместимых декодеров MPEG-2.
Б.2 В тех случаях, когда сообщения DSM-CC П-С и загрузки инкапсулируются в транспортный поток MPEG-2, должен быть использован синтаксис DSMCC_section. Этот же синтаксис может быть использован и в случае передачи других полезных данных.
Структура DSMCC_section использует синтаксис частных секций (private_section) согласно ISO/IEC [3].
Специальная семантика применяет кодирование специфических полей в заголовке DSMCC секций (DSMCC_section).
Отображение DSMCC_section в пакете транспортного потока MPEG-2 и максимальная длина DSMCC_section определяются семантикой для рrivate_sections, установленных ISO/IEC [3].
В некоторых реализациях рекомендуется использовать циклическую проверку избыточности (CRC-32), доступную для применения в рrivate_sections. Поскольку некоторые системы не обеспечивают вычисление CRC-32, синтаксис DSMCC_section допускает альтернативу использования CRC-32.
В соответствии с ISO/IEC [3], если section_syntax_indicator установлен на "1", должно быть обеспечено эффективное использование CRC-32. Если section_syntax_indicator - "0", синтаксис раздела CRC-32 должен быть аналогичным случаю, когда section_syntax_indicator - "1", за исключением того, что поле CRC-32 заменено полем контрольной суммы.
Результирующий синтаксис остается соответствующим ISO/IEC [3], так как полезные данные, следующие за полем section_length, будут обработаны как частные данные.
Поскольку section_syntax_indicator может быть искажен ошибками, поле Private_sections должно быть дополнено величиной section_syntax_indicator.
Если section_syntax_indicator установлен на "0", то private_indicator должен быть проверен на равенство "1". Невыполнение этого условия означает, что секция поражена ошибкой.
Точно так же, если section_syntax_indicator установлен на "1", тогда частный индикатор должен быть установлен на "0".
Когда section_syntax_indicator имеет значение "0" (циклическая проверка избыточности не используется) и поле контрольной суммы было установлено на "0", должна быть предусмотрена другая форма обнаружения ошибок.
Это требование гарантирует, что DSMCC_sections поддерживает требования к транспортному протоколу согласно ISO/IEC [2] (таблица 9-1).
Синтаксис и семантика, связанные с передачей private_sections (и, следовательно, DSMCC_sections), определены в ISO/IEC [3] (пункт 2.4.4).
При отсутствии ограничений одна или несколько DSM-CC-секций с той же самой table_id могут быть размещены в пакетах транспортного потока с тем же самым значением PID, поскольку другая private_section форматировала таблицы (например, в ISO/IEC [3] stream_type 005), если выполнен анализ table_id.
Формат секций DSM CC_sections приведен в таблице Б.1.
Таблица Б.1 - Формат секций DSMCC_sections
Синтаксис | Число битов | Мнемоника | |
DSMCC _section() { | |||
table_id | 8 | uimsbf | |
section_syntax_indicator | 1 | bslbf | |
private_indicator | 1 | bslbf | |
reserved | 2 | bslbf | |
dsmcc_section_length | 12 | uimsbf | |
table_id_extension | 16 | uimsbf | |
reserved | 2 | bslbf | |
version_number | 5 | uimsbf | |
current_next_indicator | 1 | bslbf | |
section_number | 8 | uimsbf | |
last_section_number if(table id == 03A) { LLCSNAP() } else if(table_id == 03B) { userNetworkMessage() } else if(table_id == 03C) { downloadDataMessage() } else if(table_id == 03D) { DSMCC_descriptor_list() } else if(table_id == 03E) { for (i=0;i<dsmcc_section_length-9;i++) { private_data_byte } } if(section_syntax_indicator == '0') { | 8 | uimsbf | |
checksum } else { | 32 | uimsbf | |
CRC_32 } | 32 | rpchof | |
} | |||
Примечание - Поле LLCSNAP - в соответствии с ISO/IEC [2] (пункт 9.2). |
Б.2.1 Семантические определения полей в секции DSMCC_section представлены ниже.
Поле table_id в случае DSMCC_section должно идентифицировать тип данных в полезной нагрузке DSMCC_section.
Это поле определяет специфические правила кодирования полей table_id_extension, version_number, section_number и last_section_number.
Перечень назначений table_id для DSM-CC приведен в таблице Б.2.
Таблица Б.2 - Перечень назначений table_id для DSM-CC