Структура PES-пакета

Структура PES-пакета показана на рис. 8.8. PES-пакет со­стоит из заголовка и следующего за ним блока полезной нагрузки (PES_packet_data_bytes) в виде элементарного потока битов одного из возможных источников. Длина заголовка и содержимого пакета в общем случае переменные.

Префикс кода начала пакета (packet_start_code_prefix) — кодовая комбинация фиксированной длины в 24 бита 0000 0000 0000 0000 0000 0001 (0x000001). Вместе со следующим за ней идентификатором потока stream_id образует код начала пакета, который служит для опоз­навания начала нового PES-пакета.

Идентификатор потока (stream_ID) — поле длиной 8 бит. В программных потоках поле stream_id определяет тип и номер элементарного потока. В транспортных потоках в поле stream_id может быть уста­новлено любое разрешенное значение, которое правильно описывает тип элементарного потока. В транспортных потоках тип элементарно­го потока определяется содержанием таблиц сервисной информации. Важые значения поля stream_id:

- 110ххххх - ISO/IEC 13818-3 звуковой поток номер ххххх;

- 1110хххх - ISO/IEC 13818-2 видео поток номер хххх;

- 11111111 - каталог (program stream directory). Содержит прямые ссылки на некоторые PES-пакеты программы для быстрой навигации. Это возможно только для программ, записанных на носители;

- 10111110 - padding_stream - заполняющий поток. Никакого полезного содержимого не несёт, используется для поддержания среднего битрейта общего мультиплексированного потока в случаях, когда в других потоках становится мало данных;

- 11110000 и 11110001 - Entitlement Control Messages (ECM) и Entitlement Management Messages (EMM) - зарезервированы для управления доступом, проще говоря - для ограничения возможности просмотра зашифрованных данных. Содержание их стандартом не регламентируется;

- 10111101 и 10111111 - private_stream_1 и private_stream_2 - приватные потоки 1 и 2, содержимое которых не регламентируется стандартом MPEG2, а оставляется для

-

-

- Рисунок 8.8 – структура PES-пакета

- возможных расширений. Например, в DVD приватный поток 1 используется для субтитров и аудиодорожек в AC3, DTS и LPCM, а 2 - для нацигационных пакетов (для ускоренного воспроизведения);

Длина PES-пакета (PES_packet_length) — поле длиной 16 бит, указывающее число байтов содержимого пакета, т.е. байтов остающихся в пакете непосредственно после этого поля. Значение 0 показывает, что длина PES-пакета не определена и не ограничена. Это допускается только для PES-пакетов, в которых полезная нагрузка состоит из байтов эле­ментарного потока видеоданных, содержащегося в пакетах транспорт­ного потока.

Необязательный заголовок PES-пакета имеет пе­ременную длину и содержит произвольное число полей в виде различ­ных байтов управления, индикаторов, флагов и т.п., детально описы­вающих структуру данных пользователя и возможные режимы работы приемного оборудования. В этом заголовке содержаться селдующие основные флаги, указывающие на наличие или отсутствие в заголовке дополнительных полей, которые не являются обязательными:

управление скремблированием PES-пакета (PES_scrambling_control) — поле длиной 2 бита указывает режим скремблирования полезной нагрузки PES-пакета. Если осуществлено скремблирование на уровне PES-пакета, то заголовок PES-пакета, который может содержать нео­бязательные поля, не должен скремблироваться;

приоритет PES-пакета (PES_priority) — поле длиной 1 бит, указывающее приоритет полезной нагрузки в данном PES-пакете. Значение 1 указывает на более высокий приоритет полезной нагрузки данного PES-пакета, чем у полезной нагрузки PES-пакета, у которого это поле установлено в 0. Мультиплексор может использовать бит PES_priority, что бы расположить входящие данные в пределах элементарного потока согласно их приоритетам;

флаг авторских прав (copyright) – поле с 1 битом. Установленное в «1» указывает, что материал, содержащийся в полезной нагрузке PES-пакета защищен авторским правом;

оригинал или копия (original_or_copy)— поле длиной 1 бит. Если оно установлено в 1, то содержание связанной полезной нагрузки PES-пакета является оригиналом. Если оно установлено в 0, то содержание связанной полезной нагрузки PES-пакета является копией;

флаги PTS, DTS (PTS_DTS_flags) — поле длиной 2 бита, указывающее на наличие полей с метками времени представления PST (Presentation Time Stamps) и декодирования DTS (Decoding Time Stamps). Когда поле PTS_DTS_flags установлено в 10, в заголовке PES-пакета должны при­сутствовать поля метки времени отображения PTS. Когда поле PTS_DTS_flags установлено в 11, в заголовке PES-пакета должны при­сутствовать и поля PTS, и поля метки времени декодирования DTS. Когда поле PTS_DTS_flags установлено в 00, в заголовке PES-пакета не должны присутствовать поля PTS или поля DTS. Значение поля 01 запрещено. Метки PTS и DTS имеют особую значимость – это механизм, обеспечивающий синхронизацию потоков данных в декодере (метки PTS и DTS будут рассмотрены в 8.5);

флаг «часов» элементарного потока ( ESCR_flag) – 1-битный флаг. Установленный в «1» указывает, что поля ESCR присутствуют в заголовке PES-пакета. Значение «0» указывает, что полей ESCR нет. ESCR – это ссылка времени элементарного потока, т.е. метка времени в PES потоке, из которой декодеры PES потоков могут восстановить синхронизацию (ESCR будет рассмотрено в 8.5);

флаг скорости элементарного потока (ES_rate_flag) – 1-битный флаг. Установленный в «1» указывает, что поле ES_rate присутствует в заголовке PES-пакета. Значение «0» указывает, что поле ES_rate отсутствует. ES_rate (скорость элементарного потока) - поле с 22 битами, целое число без знака, определяющее скорость, с которой системный приемный декодер принимает байты PES-пакета в случае PES потока. ES_rate действительно в PES-пакете, в который оно включено, и в последующих PES-пакетах того же самого PES потока, пока не поступит поле ES_rate с другим значением;

DSM_trick_mode_flag - флаг с 1 битом. Установленный в «1» указывает присутствие поля метода «уловки» с 8 битами. Когда установлен в «0» указывает, что это поле отсутствует;

PES_CRC_flag: флаг проверки PES пакета — поле длиной 1 бит, ко­торое, будучи установлено в 1, указывает, что поле циклической про­верки на четность CRC присутствует в PES-пакете. Если значение поля установлено в 0, то это указывает на то, что поле проверки отсутствует;

PES_extension_flag - флаг с 1 битом. Установленный в «1» показывает, что расширенное поле присутствует в заголовке PES-пакета. Когда установлен в «0», это поле отсутствует;

PES_header_data_length: длина данных заголовка PES пакета — поле длиной 8 бит, которое определяет общее число байтов, занятых необя­зательными полями и любыми байтами стаффинга, содержащимися в заголовке этого PES-пакета. Присутствие необязательных полей инди­цируется байтом, который предшествует полю PES_header_data_length;

Необязательные поля в расширение PES пакета несут дополнителную информацию по программному потоку и частным данным.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: