Метки рекламы¶
Обзор¶
Метка рекламы говорит нижестоящему оборудованию, где в потоке начинается и кончается рекламный блок. 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. Потерянная метка входит в общий счёт ошибок входа, см. Ошибки входа.