6.1 Таблица взаимосвязи программ PAT
6.1.1 Таблица взаимосвязи программ PAT должна определять соответствие между меткой program_number и значением PID для пакетов транспортного потока. Метка program_number - это числовая метка, связанная с программой. Для каждой службы в мультиплексе таблица PAT должна указывать местонахождение соответствующей таблицы РМТ (значения PID пакетов транспортного потока). Она также должна указывать местонахождение таблицы сетевой информации NIT.
6.1.2 Общая таблица может содержаться в одной или нескольких секциях с описанным далее синтаксисом. Она может быть сегментирована и может занимать несколько секций (см. таблицу 4).
Таблица 4
Синтаксис | Число битов | Мнемокод | |||
program_association_section() { | |||||
table_id | 8 | uimsbf | |||
section_syntax_indicator | 1 | bslbf | |||
"0" | 1 | bslbf | |||
reserved | 2 | bslbf | |||
section_length | 12 | uimsbf | |||
transport_stream_id | 16 | uimsbf | |||
reserved | 2 | bslbf | |||
version_number | 5 | uimsbf | |||
current_next_indicator | 1 | bslbf | |||
section_number | 8 | uimsbf | |||
last_section_number | 8 | uimsbf | |||
for (i = 0; i < N; i++) { | |||||
program_number | 16 | uimsbf | |||
reserved | 3 | bslbf | |||
if (program_number = = "0") { | |||||
network_PID | 13 | uimsbf | |||
} | |||||
else { | |||||
program_map_PID | 13 | uimsbf | |||
} | |||||
} | |||||
CRC_32 | 32 | rpchof | |||
} |
6.1.3 Каждая секция PAT должна передаваться не реже, чем каждые 100 мс [4].
6.1.4 Семантические определения полей в секции взаимосвязи программ PAT:
table_id: идентификатор таблицы (см. таблицу 3).
section_syntax_indicator: индикатор синтаксиса секции - поле длиной 1 бит, которое должно быть установлено равным "1".
reserved: зарезервировано.
section_length: длина секции - поле длиной 12 бит, первые два бита которого должны иметь значение "00". Оставшиеся 10 битов определяют количество байтов в секции, начинающейся сразу же после поля section_length, включая CRC. Значение в этом поле не должно превышать величины 1021 (0x3FD).
transport_stream_id: идентификатор транспортного потока - поле длиной 16 бит, которое служит меткой, для того чтобы отличить этот транспортный поток от любого другого мультиплексированного потока в сети. Его значение определяется пользователем.
version_number: номер версии - поле длиной 5 бит представляет собой номер версии полной таблицы взаимосвязи программ. Номер версии должен увеличиваться на 1 (по модулю 32) всегда, когда происходят изменения в таблице взаимосвязи программ. Когда индикатор current_next_indicator установлен в "1", поле version_number должно соответствовать применяемой в текущий момент версии таблицы PAT. Когда индикатор current_next_indicator установлен в "0", поле version_number должно соответствовать следующей применяемой версии таблицы взаимосвязи программ.
current_next_indicator: индикатор текущая/следующая - поле длиной 1 бит, которое, будучи установлено в "1", указывает, что в настоящий момент применяется переданная таблица PAT. Когда этот бит установлен в "0", он указывает, что переданная таблица уже неприменима, и что должна быть введена в действие следующая таблица.
section_number: номер секции - поле длиной 8 бит указывает номер этой секции. Поле section_number первой секции в таблицы взаимосвязи программ должно быть представлено в шестнадцатеричном формате. Оно должно увеличиваться на 1 с появлением каждой дополнительной секции в таблице взаимосвязи программ.
last_section_number: номер последней секции - поле длиной 8 бит указывает номер последней секции (т.е. секции с наибольшим номером section_number) полной таблицы взаимосвязи программ.
program_number: номер программы - поле длиной 16 бит. Он определяет программу, к которой применяется поле program_map_PID. Когда он установлен в 0x0000, то следующим опорным PID должен быть PID сети. Во всех других случаях значение этого поля определяется пользователем. Это поле не должно принимать никакого значения более чем один раз в пределах одной версии таблицы взаимосвязи программ. (Поле program_number может использоваться, например, для обозначения радиовещательного канала.)
network_PID: PID сети вещания - это поле длиной 13 бит, которое используется только в объединении со значением поля program_number=0x0000 и определяет значение PID пакетов транспортного потока, которые должны содержать таблицу сетевой информации. Присутствие идентификатора network_PID является необязательным.
program_map_PID - поле длиной 13 бит, определяющее значение PID пакетов транспортного потока, которые должны содержать секцию program_map_section, применимую программе, определенной полем program_number. Ни одно поле program_number не должно иметь более одного назначения program_map_PID.
CRC_32 - поле длиной 32 бита, которое содержит значение кода циклической проверки на основе избыточности CRC. При отсутствии ошибок в данных после обработки полной секции PAT результатом проверки являются "нули" на выходе регистров в декодере, определенном в Приложении В.
6.2 Таблица структуры программы PMT
6.2.1 Таблица структуры программы PMT обеспечивает связь между номерами программ и составными элементами программы при помощи идентификаторов программ PID. Таблица структуры программы PMT должна идентифицировать и указывать местоположение потоков, которые составляют каждую службу и местоположение полей эталонных меток времени программы конкретной службы. Таблица структуры программы PMT должна передаваться в пакетах, значения PID для которых выбираются кодером. Эта таблица содержится в одной или нескольких секциях с описанным ниже синтаксисом. Она может быть сегментирована и занимать несколько секций. Секции должны определяться полем номера программы program_number.
Синтаксис секции структуры программы РМТ для транспортного потока приведен в таблице 5.
Таблица 5
Синтаксис | Число битов | Мнемокод | |||
TS_program_map_section() { | |||||
table_id | 8 | uimsbf | |||
section_syntax_indicator | 1 | bslbf | |||
"0" | 1 | bslbf | |||
reserved | 2 | bslbf | |||
section_length | 12 | uimsbf | |||
program_number | 16 | uimsbf | |||
reserved | 2 | bslbf | |||
version_number | 5 | uimsbf | |||
current_next_indicator | 1 | bslbf | |||
section_number | 8 | uimsbf | |||
last_section_number | 8 | uimsbf | |||
reserved | 3 | bslbf | |||
PCR_PID | 13 | uimsbf | |||
reserved | 4 | bslbf | |||
program_info_length | 12 | uimsbf | |||
for (i = 0; i < N; i++) { | |||||
descriptor() | |||||
for (i = 0; i < N1; i++) { | |||||
stream_type | 8 | uimsbf | |||
reserved | 3 | bslbf | |||
elementary_PID | 13 | uimsbf | |||
reserved | 4 | bslbf | |||
ES_info_length | 12 | uimsbf | |||
for (i = 0; i < N2; i++) { | |||||
descriptor() | |||||
} | |||||
} | |||||
CRC_32 | 32 | rpchof | |||
} |