Использование меток SCTE-104/35 в системах цифровой вставки программ. Часть 2. Управление вставкой программ с использованием сообщений SCTE-104/35

Добавлено 21 февраля 2018 в 23:40

В первой части статьи речь шла об архитектуре систем сетевого вещания с цифровой вставкой программ. Ниже рассматриваются вопросы управления вставкой программ с использованием сообщений SCTE-104/35.

Виды команд в сообщениях SCTE-35

Сообщение SCTE-35 может содержать одну из шести возможных команд. Две команды – Splice_schedule() и Splice_insert() – предназначены для передачи информации об одном или нескольких предстоящих событиях сплайсинга. Наличие скобок в обозначении команды говорит о том, что в ее составе передается набор данных, определяемых в спецификациях SCTE для каждой команды.

Определены четыре вида вспомогательных команд: Splice_null(), Bandwidth reservation(), Time_signal(), Private_command().

Команда Splice_null() не передает каких-либо данных и используется для проверки отклика от устройств-получателей сообщений. Команда Bandwidth reservation() используется для отправки системе компрессии запроса на выделение дополнительной полосы пропускания, которая будет использоваться для передачи элементарного PID-потока с сообщениями SCTE-35. Команда Time_signal() используется для передачи меток точного времени, на основании которых устройства-получатели команды могут синхронизировать выполнение своих действий с устройствами-отправителями команд. А команда Private_command() может использоваться для передачи других данных, не оговоренных в спецификациях SCTE-104/35.

Виды команд в сообщениях SCTE-104

Сообщение SCTE-104 принципиально может содержать до 216 различных команд, однако из этого множества реально используются только несколько десятков. Конкретный список используемых команд различается для двух типов сообщений – тех, что могут содержать только одну команду (Single Operation Message), и тех, которые могут содержать одну и более команд (Multiple Operation Message). На практике в основном используются сообщения второго типа.

Сообщения SCTE-104 типа Multiple Operation Message

На рис. 2-1 показаны поля сообщений SCTE-104 типа Multiple Operation Message.

Рис. 2-1. Поля данных сообщений SCTE-104 и SCTE-35
Рис. 2-1. Поля данных сообщений SCTE-104 и SCTE-35

Сообщение состоит из двух частей. Первая часть – набор полей заголовка Multiple Operation Message, этот заголовок содержит общие для всех команд поля. Вторая часть – набор полей передаваемой в сообщении команды. Здесь для примера даны поля двух команд – Schedule_definition_request и Splice_request.

В составе заголовка Multiple Operation Message находятся поля:

  • Reserved – всегда устанавливается в значение FFFFh;
  • Message Size – содержит размер всего сообщения в байтах;
  • Protocol Version – для актуальных реализаций устанавливается в 0. В будущих реализациях с иной укладкой в сообщение полезной нагрузки будут использоваться иные значения;
  • AS_index – идентифицирует для инжектора систему автоматизации, которая является источником сообщения SCTE-104. В то же время основная и резервная системы автоматизации, работающие на один программный канал (один инжектор), должны иметь общий индекс, но в каждый момент времени на связи должна находиться (быть активной) только одна из них. Нулевое значение игнорируется;
  • Message_number – идентифицирует каждое отдельное сообщение SCTE-104. В то же время, если несколько повторяющихся сообщений имеют общее содержание, они должны иметь один и тот же номер. Для последовательных различающихся сообщений используется инкрементируемое по модулю 256 значение Message_number;
  • DPI_PID_index – несет информацию об идентификаторе PID-пакетов MPEG-2 TS, в которых система автоматизации планирует передавать элементарный поток сообщений SCTE-35. Этот индекс используется, если в составе одной программы передаются несколько потоков сообщений SCTE-35, каждый из которых формируется своим выделенным инжектором. Другой вариант использования – адресация сообщений от системы автоматизации одному из нескольких инжекторов, использующих общую линию SDI для связи с системой автоматизации через один инсертер. Нулевое значение игнорируется;
  • SCTE-35 Protocol Version – предназначены для использования в будущих реализациях, когда актуальная нулевая версия получит дальнейшее развитие;
  • Timestamp() – содержит значение времени, когда инжектором должны обрабатываться поступающие в данном сообщении команды. Это режим отложенной (deferred) обработки команд в инжекторе. В таком режиме время в системе автоматизации и в инжекторе должно быть общим с точностью до нескольких миллисекунд. Если в сообщении SCTE-104 содержится несколько команд, то они должны обрабатываться инжектором в указанное время, начиная с первой команды и далее в порядке расположения команд в теле сообщения. Поле Timestamp() имеет различную длительность в зависимости от варианта передачи данных. Возможны три варианта форматирования времени в этом поле: время UTC с точностью до микросекунд (отсчитывается от 0 часов 6 января 1980 г), временной код VITC HH:MM:SS:FF, номер и активный фронт триггера GPI, который инициировал передачу сообщения. В режиме немедленного выполнения (immediate mode) поле Timestamp() устанавливается равным 0, команда обрабатывается инжектором без задержки, синхронизация времени между системой автоматизации и инжектором не требуется. Такой вариант рекомендуется использовать при формировании сообщений SCTE-104 в составе сигнала SDI, тогда данные SCTE-104 помещаются инсертером в пакеты VANC ближайшего кадра. Размер поля Timestamp() в этом случае равен 1 байту;
  • Num_ops – определяет количество команд, которое передается в данном сообщении SCTE-104 в виде блоков. В каждый блок данных входят поля Op_ID, Data_length, Data() передаваемой в этом блоке команды. Для передачи одной команды используется значение Num_ops=1. Важно отметить, что каждая из команд в одном сообщении SCTE-104 преобразуется инжектором в отдельное сообщение SCTE-35, всегда содержащее только одну команду;
  • Op_ID – идентифицирует команду, которая передается в блоке данных. Связь идентификатора и команды определена в [SCTE 104]. В данном примере значение Op_ID=0101 указывает на передачу данных команды splice_request_data(), Op_ID=010Е указывает на передачу данных команды schedule_definition_data();
  • Data_length – указывает на общее количество байтов в команде;
  • Data() – содержит данные (параметры) команды, определенной ранее в поле Op_ID.

Команды управления сплайсингом

Среди множества возможных команд в сообщениях SCTE-104/35 выделяются две пары взаимосвязанных команд SCTE-104 и SCTE-35, проходящих по всей цепи система автоматизации → система компрессии → сплайсер. Обе пары команд передаются в широковещательном (broadcast) режиме для всех ЦРП в составе сети распространения программного сигнала ЦФП. Спецификация [SCTE 35] описывает варианты шифрования сообщений SCTE-35, которые могут декодироваться на приемной стороне при наличии ключа. Однако по данным [SCTE 67] шифрование этих сообщений на практике не используется.

Команда SCTE-104 Schedule_definition_request() преобразуется инжектором в команду SCTE-35 Splice_schedule(), обе переносят уведомляющую информацию о расписании предстоящего события сплайсинга. Команда SCTE-104 Schedule_definition_request() обычно следует за командой start_schedule_download request(), которая подготавливает инжектор к приему относительно большой (до 4096 байт) порции данных, содержащихся в последующих сообщениях Schedule_definition_request().

Команда SCTE-104 Splice_request() преобразуется инжектором в команду SCTE-35 Splice_insert(). Последовательная передача этих команд обеспечивает управление сплайсером от системы автоматизации при переключении между основным каналом и каналом ввода.

Практика работы систем DPI, приведенная в [SCTE 67], указывает на преобладающее использование пары команд Splice_request() и Splice_insert() для управления сплайсингом. По этой причине ниже более подробно анализируется состав полей данных именно этих команд. Поля, выделенные одинаковым цветом в таблицах данных Schedule_definition_request() и Splice_request(), обладают идентичным содержанием. Специфическими для команды Schedule_definition_request() являются поля Spice_schedule_command и Time(). Первое поле определяет вид точки сплайсинга – вход или выход, значение Spice_schedule_command=5 означает отмену ранее переданных данных. Поле Time() содержит время в формате UTC, на которое планируется событие сплайсинга.

Поля данных команды Splice_request()

  • Splice_insert_type определяет тип запроса на выполнение сплайсинга. Запросы SpliceStart_normal (Splice_insert_type=1) и SpliceEnd_normal (Splice_insert_type=3) определяют команды «нормального» старта и окончания рекламного брейка, когда соответствующее событие сплайсинга должно произойти через интервал времени pre-roll_time. Значение pre-roll_time передается в соответствующем поле этой же команды. Запросы SpliceStart_immediate (Splice_insert_type=2) и SpliceEnd_immediate (Splice_insert_type=4) определяют команды «немедленного» старта и окончания рекламного брейка. В таком режиме значение поля pre-roll_time игнорируется или передается равным 0. Запросы «немедленного» действия не рекомендуются к использованию, поскольку могут приводить к нарушению условий бесшовного сплайсинга. Значение Splice_insert_type=5 означает запрос на отмену предыдущего запроса SpliceStart_normal.
  • Splice_event_id содержит уникальный идентификатор события сплайсинга. Допускается использовать один и тот же идентификатор для точки входа и точки выхода брейка. 32-разрядное поле позволяет использовать этот идентификатор для передачи дополнительной информации о рекламном брейке.
  • Unique_program_id служит для идентификации региональным вещателем программы центральной станции, во время которой должно произойти событие сплайсинга. Нулевое значение игнорируется.
  • Pre-roll_time указывает в миллисекундах интервал времени от выдачи сообщения splice_request до выполнения события сплайсинга. Минимальное рекомендуемое значение для «нормальных» команд сплайсинга составляет 4 с. Можно использовать и другие значения pre-roll_time, в том числе различные значения для событий SpliceStart_normal и SpliceEnd_normal, относящихся к одному рекламному брейку. Для «немедленных» команд сплайсинга значение pre-roll_time либо равно 0, либо игнорируется. Если для одного события сплайсинга с единым Splice_event_id последовательно формируются несколько сообщений, то в каждом из следующих за первым сообщением должно содержаться свое уменьшенное значение pre-roll_time. Если между несколькими командами на один переход возникает рассогласование значений pre-roll_time, то учитывается значение pre-roll_time из последнего принятого сообщения.
  • Break_duration указывает в десятых долях секунды длительность рекламного брейка, выполнение которого инициируется данной командой. Обычная практика заключается в отправке пары сообщений: первое – на старт, второе – на окончание рекламного брейка при нулевых значениях Break_duration и Auto_return_flag. Передача в составе сообщения истинного значения Break_duration вместе с ненулевым значением Auto_return_flag указывает на автоматический возврат к программе центральной станции по истечении времени рекламного брейка без отправки команды SpliceEnd_normal. Рекомендуется передавать в составе сообщения истинное значение Break_duration и при нулевом Auto_return_flag для аварийного возврата к программе центральной станции при неполучении сообщения SpliceEnd_normal или ошибке при его приеме.
  • Avail_num идентифицирует рекламный слот внутри программы с идентификатором Unique_program_id. Каждый последующий слот должен иметь инкрементированный Avail_num. Нулевое значение игнорируется.
  • Avails_expected указывает на общее количество слотов внутри программы с идентификатором Unique_program_id. Обычно Avail_num меньше или равен Avails_expected. Для программ, хронометраж которых заранее точно не известен (прямые трансляции спортивных событий), значение Avail_num может превышать Avails_expected в интервале «перебора» запланированного хронометража программы.
  • Auto_return_flag передает информацию о планируемом режиме выхода из рекламного брейка. Ненулевое значение совместно с полем Break_duration указывает на автоматический возврат к программе центральной станции по истечении времени рекламного брейка без отправки команды SpliceEnd_normal. Нулевое значение указывает на ожидание команды с сообщением SpliceEnd_normal.

Передача данных между командами SCRTE-104 Splice_request и SCTE-35 Splice_insert

На рис. 2-1 показана та часть данных сообщения SCTE-35 Splice_insert, которая формируется на основе информации, принятой инжектором в составе сообщения SCTE-104 Splice_request.

Поля Splice_event_id, Unique_program_id, Avail_num, Avails_expected переносятся из байтового (SCTE-104) в битовое (SCTE-35) представление без изменений.

Данные Pre-roll_time переходят в два поля – Time_specified_flag и Pre-roll_time, при этом мера времени меняется от счета миллисекунд к счету отметок времени PTS. Битовое поле Time_specified_flag, равное 1, указывает на последующую передачу данных Pre-roll, нулевой флаг указывает на отсутствие передачи данных Pre-roll. При этом значение Pre-roll_time в сообщении SCTE-35 практически всегда будет отличаться от этого же значения в сообщении SCTE-104 в большую сторону за счет учета задержки при кодировании.

Данные Break_duration и Auto_return_flag переходят в поля Auto_return и Duration, при этом мера времени меняется от счета десятых долей секунды к счету отметок времени PTS. Единичное значение флагов указывает на передачу длительности брейка и планирование его окончания в ЦРП по истечению времени Duration без дополнительной команды от системы автоматизации. Нулевое значение флагов означает ожидание команды на окончание брейка от системы автоматизации. В этом случае значение Duration может использоваться для дублирования возврата к сигналу центральной станции, если по каким-либо причинам команда на окончание брейка не поступит до истечения Duration. Единичное значение битового поля Duration_flag указывает на присутствие в сообщении SCTE-35 поля Duration.

Битовый флаг Out_of_network_indicator (OON) сообщает о виде точки сплайсинга на основе данных Splice_insert_type из сообщения SCTE-104. Единичное значение указывает на точку Splice In, нулевое значение – на точку Splice Out.

Битовый флаг Splice_immediate_flag при нулевом значении указывает на нормальное планирование сплайсинга с использованием времени pre-roll. Если этот флаг равен единице, то требуется немедленное (Immediate Mode) выполнение сплайсинга, при этом поля Time_specified_flag и Pre-roll_time в сообщении SCTE-35 не передаются.

Битовый флаг Splice_event_cancel_indicator при единичном значении отменяет ранее запланированное событие сплайсинга с тем же идентификатором Splice_event_id.

Битовый флаг Program_splice_flag передается равным 1, если во входной точке сплайсинга планируется переключать все PID-компоненты транспортного потока. Это режим Program Splice Mode. Нулевое значение флага указывает на переключение только части PID-компонентов транспортного потока в режиме Component Splice Mode. В таком случае в составе сообщений SCTE-104/35 дополнительно к показанным на рис. 2-1 полям передается количество переключаемых компонентов Component Count и за ним в цикле указывается PID переключаемого компонента (Component tag) и время Pre-roll для переключения каждого компонента.

Различное форматирование одних и тех же данных сплайсинга в сообщениях SCTE-104 и SCTE-35 не препятствует их прямому и обратному преобразованию без потерь информации. Однако представление данных сплайсинга чаще используется именно в формате полей Splice_request, как более удобное для человеческого восприятия.

Взаимодействие компонентов системы DPI при выполнении брейка

На рис. 2-2 показано взаимодействие компонентов системы DPI на примере выполнения старта и окончания брейка в нормальном режиме.

Рис. 2-2. Диаграмма взаимодействия компонентов системы DPI при нормальном старте и завершении регионального брейка
Рис. 2-2. Диаграмма взаимодействия компонентов системы DPI при нормальном старте и завершении регионального брейка

Предполагается, что система автоматизации и инсертер взаимодействуют по двунаправленному соединению TCP/IP в локальной сети ЦФП, сплайсер и рекламный сервер также взаимодействуют по соединению TCP/IP, но уже в пределах локальной сети ЦРП. В ответ на инициирующее сообщение адресат отвечает подтверждающим сообщением. Взаимодействие между инсертером и инжектором, а также между инжектором и сплайсером – однонаправленное. В первом случае транспорт сообщений происходит по интерфейсу SDI, во втором – по интерфейсу MPEG-2 TS.

Сессия вставки регионального брейка начинается с отправки системой автоматизации сообщения Splice_request с параметром SpliceStart Normal. Инсертер вставляет данные Splice_request в пакет VANC ближайшего кадра. Если поле Timestamp() содержит ненулевое значение времени UTC, то инжектор именно в это время должен отправить сообщение Splice_insert, в котором значение Out_of_network_indicator (OON) равно 1. Если же поле Timestamp() равно 0, то инжектор отправляет сообщение Splice_insert немедленно.

На рис. 2-2 предполагается, что задержка сообщений TCP/IP существенно меньше критической для систем DPI длительности одного кадра. Задержки в интерфейсах SDI и MPEG-2 TS могут превышать это время, причем существенно. Спецификации SCTE-104/35 разработаны именно таким образом, чтобы нивелировать влияние задержек в интерфейсах SDI и MPEG-2 TS на кадровую точность выполнения вставки брейков. Сообщения SCTE-104/35 претерпевают такие же задержки, что и несущий их сигнал – SDI или MPEG-2 TS. Время задержки не имеет значения, вставка регионального брейка произойдет корректно даже при задержке сигнала на несколько часов. В тракте передачи потока MPEG-2 TS между центром компрессии и ЦРП задержки могут быть не только порядка нескольких секунд, но и иметь джиттер. Чтобы максимально исключить влияние задержки и джиттера на точность вставки, время pre-roll в сообщении отсчитывается в формате времени PTS. Обрывы PTS будут влиять на точность вставки, только если они произошли внутри относительно короткого интервала времени pre-roll.

Обмен сообщениями между сплайсером и рекламным сервером (помечены*) нормируется в документе [SCTE 30]. Сразу же после приема Splice_insert (OON=1) сплайсер отправляет на рекламный сервер запрос Cue_request на воспроизведение рекламного блока. В это сообщение переходят все данные сплайсинга из Splice_insert (OON=1), поэтому сервер получает всю необходимую информацию, в том числе и время pre-roll. Идентифицировать требуемый файл или лист воспроизведения рекламный сервер может, например, по значению Splice_Event_ID. Не более, чем за 3 с до начала брейка, сервер извещает сплайсер о своей готовности сообщением Splice_request. Через интервал времени pre-roll сервер посылает поток MPEG- 2 TS на канал ввода сплайсера, сплайсер переключает потоки и уведомляет об этом сервер отправкой сообщения Splice_complete.

Выход из брейка в нормальном режиме происходит по такой же схеме взаимодействия. Отличие в том, что сообщение Splice_request от системы автоматизации отправляется с параметром SpliceEnd Normal, в Splice_insert поле OON=0, сплайсер отправляет в адрес сервера только одно сообщение Splice_complete об окончании брейка. Сервер заканчивает воспроизведение регионального брейка по его запланированному хронометражу.

При выполнении старта или окончания брейка в режиме Immediate время pre-roll не учитывается, сплайсинг выполняется в ближайшей возможной точке переключения потоков. Для старта брейка в таком режиме сервер должен обеспечивать минимально возможное время подготовки.

Источник:

  • Александр Перегудов. Использование меток SCTE-104/35 в системах цифровой вставки программ // MediaVision. - 2016 - 02. - 46-49

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.


Сообщить об ошибке