Skip to content

Метки рекламы

Обзор

Метка рекламы говорит нижестоящему оборудованию, где в потоке начинается и кончается рекламный блок. Mcaster принимает метки на входе, проводит их через стрим вместе с видео и звуком и отдаёт на каждом выходе в том формате, который этот выход понимает. Сколько бы преобразований ни прошёл поток — выравнивание, транскодер, смена источника, — точка склейки на выходе указывает на тот же кадр, что и на входе.

Метки приходят со входов:

  • MPEG-TS — секции SCTE-35 на PID с stream_type 0x86, см. Приём мультикаста и MPTS;
  • SDI — сообщения SCTE-104 в VANC, см. Приём SDI;
  • HLS — теги медиаплейлиста EXT-X-DATERANGE с атрибутами SCTE35-OUT, SCTE35-IN, SCTE35-CMD и теги EXT-X-CUE-OUT / EXT-X-CUE-IN.

И уходят:

  • в MPEG-TS — секциями SCTE-35 со своим PID;
  • в SDI — сообщениями SCTE-104 в VANC выходного кадра;
  • в HLS — тегами EXT-X-DATERANGE и EXT-X-CUE-OUT / EXT-X-CUE-OUT-CONT / EXT-X-CUE-IN;
  • в DASH — событиями EventStream в периоде манифеста;
  • в архив — вместе с сегментами, так что архивный плейлист несёт те же метки, что нёс живой.

Рекламный блок

Источник обычно не присылает одну метку на блок. Сначала приходят анонсы — «через 8 секунд уходим в рекламу», часто повторённые несколько раз, — затем, иногда, немедленная метка ухода, а через минуты — метка возврата. Mcaster собирает метки одного события (splice_event_id) в один рекламный блок и помнит его, пока блок идёт.

Если источник прислал только анонс, а своей склейки в момент ухода не прислал, склейку ставит сам Mcaster — на кадре, до которого дошла точка из анонса. Эта склейка остаётся внутри Mcaster: наружу лишняя метка не уходит ни в одном формате, и выход несёт ровно те метки, что прислал источник. Если в анонсе объявлен возврат по истечении длительности (auto_return), возврат Mcaster ставит так же.

На каждой склейке сегмент HLS и DASH закрывается на первом ключевом кадре не раньше точки склейки, не дожидаясь своей обычной длительности. Благодаря этому реклама начинается с нового сегмента, и плеер или система серверной вставки рекламы могут заменить сегменты блока целиком.

Сверка прогноза. Точка склейки из анонса — прогноз. Mcaster сравнивает его с тем, где сегмент на самом деле закрылся, и показывает разницу. Граница ложится на ключевой кадр, поэтому, если в точке склейки ключевого кадра нет, разница доходит до длины GOP.

Смена источника. При переключении на резервный источник склейки, которые только ожидались, снимаются: анонсы прежнего источника к новому отношения не имеют. Уже начавшийся блок продолжается до возврата.

HLS

Блок выдаётся одним диапазоном EXT-X-DATERANGE: пока блок идёт — с началом и SCTE35-OUT, после возврата тот же диапазон получает конец, длительность и SCTE35-IN. Рядом плейлист несёт теги EXT-X-CUE-OUT на первом сегменте блока, EXT-X-CUE-OUT-CONT на следующих и EXT-X-CUE-IN на первом сегменте после блока: одни плееры и системы вставки рекламы читают диапазоны, другие — эти теги.

На входе HLS метки берутся из тех же тегов. Теги, которые уже лежали в плейлисте в момент подключения, считаются прошлым и меткой не становятся. Если сегменты источника сами несут PID меток SCTE-35, теги плейлиста не используются: время метки в сегменте точнее.

Вкладка «Реклама»

Что происходит с метками стрима, видно на странице стрима, вкладка Реклама. Она обновляется сама, раз в две секунды.

Блок Сейчас показывает:

  • в рекламе стрим или в программе;
  • идущий блок: номер события, когда он начался, заявленная длительность и сколько осталось;
  • ожидающие склейки — анонсы, точка которых ещё не наступила;
  • последнюю сверку прогноза: где ожидалась склейка, где закрылся сегмент и на сколько они разошлись.

Анонс пришёл, склейка ожидается

Таблица История меток перечисляет метки стрима, новые сверху: время, откуда запись — вход (метка источника) или менеджер (склейка, которую поставил Mcaster, или смена источника), вид метки, номер события, точка склейки, заявленная длительность и типы сегментации SCTE-35.

Идёт рекламный блок

История хранится в памяти стримера, на котором идёт стрим, и начинается заново при его перезапуске. Если стрим сейчас не запущен, вкладка так и говорит. Сами метки при этом никуда не пропадают: они записаны в архив вместе с сегментами.

Счётчики

Принятые и потерянные метки входа и выхода считают счётчики Prometheus: stream_input_ad_marks_total, stream_input_errors_ad_marks_dropped_total, stream_out_ad_marks_total, stream_out_errors_ad_marks_lost_total. Потерянная метка входит в общий счёт ошибок входа, см. Ошибки входа.