Ми розробили кросплатформенний фреймворк CSAI з уніфікованим рівнем оркестрації реклами, який парсить маркери SCTE-35 з HLS/DASH маніфестів, взаємодіє з рекламними серверами VAST/VMAP та керує життєвим циклом відтворення реклами на веб- (Video.js/Shaka), iOS (AVPlayer), Android (ExoPlayer) та підключених телевізійних плеєрах.
Архітектура
- Доставка контенту: потоки HLS/DASH з маркерами SCTE-35 через AWS MediaPackage + CloudFront
- Сервер прийняття рішень щодо реклами: Google Ad Manager (GAM) / SpotX з підтримкою VAST 4.2 та VMAP
- Веб-плеєр: Video.js з користувацьким парсером маркерів SCTE-35 та інтеграцією Google IMA SDK
- iOS-плеєр: AVPlayer зі слухачем
AVDateRangeMetadataGroup та IMA iOS SDK
- Android-плеєр: ExoPlayer зі слухачем
MetadataOutput та IMA Android SDK
- Підключені телевізори: нативні плеєри платформ (Roku RAF, Fire TV IMA, Apple TV AVKit) з адаптерами рекламних фреймворків
- Аналітика реклами: користувацький конвеєр подій для відстеження показів, кварталів, завершень, кліків та видимості
- Відкат: Доставка заставок/внутрішньої реклами, коли заповнення реклами недоступне або виявлено блокувальник реклами
Парсинг SCTE-35 на стороні клієнта
Маркери маніфесту HLS
Сигнали SCTE-35 з'являються в HLS маніфестах у двох форматах, обидва парсяться клієнтом:
EXT-X-DATERANGE (HLS v7+)
- Плеєр прослуховує теги
#EXT-X-DATERANGE з атрибутами SCTE35-OUT та SCTE35-IN
- Атрибути включають
PLANNED-DURATION для тривалості рекламної паузи та ID для кореляції подій
- Переважний формат для сучасних плеєрів (AVPlayer, ExoPlayer, Shaka)
EXT-X-CUE-OUT / EXT-X-CUE-IN (Застаріле)
#EXT-X-CUE-OUT:DURATION= позначає початок рекламної паузи
#EXT-X-CUE-IN позначає повернення до контенту
- Підтримується для зворотної сумісності зі старими плеєрами та кодувальниками
Маркери маніфесту DASH
- Сигнали SCTE-35 з'являються як елементи
у DASH MPD з schemeIdUri="urn:scte:scte35:2013:xml"
- Елементи
містять presentationTime, duration та бінарне корисне навантаження SCTE-35, закодоване в base64
- Shaka Player та ExoPlayer парсять їх нативно через свої API слухачів подій
Потік обробки маркерів
- Виявлення — Слухач метаданих плеєра виявляє подію маркера SCTE-35 під час парсингу маніфесту
- Вилучення — Тривалість паузи, ID події та тип сегментації вилучаються з маркера
- Рекламний запит — Запит VAST/VMAP надсилається на сервер прийняття рішень щодо реклами з параметрами таргетингу (ID контенту, жанр, тип пристрою, сегмент користувача, гео)
- Планування рекламного блоку — Відповідь реклами парситься для побудови рекламного блоку (впорядкований список рекламних креативів, що заповнюють тривалість паузи)
- Попереднє завантаження — Рекламні креативи попередньо завантажуються під час відтворення контенту для усунення затримки на початку рекламної паузи
- Пауза та перемикання — Відтворення контенту призупиняється в точці маркера, плеєр перемикається на відтворення реклами
- Відтворення реклами — Реклама відтворюється послідовно з відстеженням кварталів, відображенням супутніх банерів та обробкою переходів за посиланням
- Відновлення — Після завершення рекламного блоку відтворення контенту відновлюється з точного кадру після точки маркера
Реалізації для конкретних платформ
Веб (Video.js + IMA SDK)
- Користувацький плагін Video.js перехоплює метадані
#EXT-X-DATERANGE через події зміни маркерів textTrack
- Google IMA HTML5 SDK керує VAST рекламними запитами, відтворенням реклами та відображенням супутніх елементів
- Оверлей рекламного контейнера розташовується над відеоелементом для підтримки переходів за посиланням та кнопки пропуску
- Виявлення блокувальника реклами за допомогою "канаркового" запиту — при виявленні відкат до внутрішньої реклами або відновлення контенту
- Підтримка preroll, midroll та postroll через VMAP або ручне планування точок маркерів
iOS (AVPlayer + IMA SDK)
AVPlayerItem.navigationMarkerGroups та AVDateRangeMetadataGroup використовуються для виявлення маркерів SCTE-35
- Делегат
AVPlayerItemMetadataOutput спрацьовує на кожну подію маркера з розпарсеними часовими параметрами та корисним навантаженням
- Google IMA iOS SDK обробляє VAST запити та відтворення реклами в окремому екземплярі
AVPlayer
- Картинка в картинці (PiP) призупиняється під час рекламних пауз згідно з рекламною політикою платформи
- Обробка фонового аудіо — реклама не відтворюється у фоновому режимі
Android (ExoPlayer + IMA SDK)
Player.Listener.onMetadata() з MetadataOutput захоплює події SCTE-35 з HLS/DASH
- Google IMA Android SDK інтегровано через розширення
ImaAdsLoader ExoPlayer
- Для відтворення реклами використовується окремий
MediaSource, щоб уникнути забруднення буфера контенту
- Обробляє життєвий цикл Activity — стан реклами зберігається під час зміни конфігурації та переведення в фоновий режим
- Android TV та мобільні пристрої використовують одну й ту ж логіку реклами з адаптаціями рівня UI
Платформи підключених телевізорів
Roku (RAF — Roku Ad Framework)
- Нативна бібліотека RAF Roku парсить маркери SCTE-35 безпосередньо з HLS маніфестів
RAF.setAdUrl() налаштований з VAST ендпоінтом; RAF обробляє рекламний запит, побудову рекламного блоку та відтворення
- Підтримка супутньої реклами через колбеки
renderStitchedAd та renderTrackingEvent RAF
- Сертифікація Roku вимагає використання RAF — користувацькі рекламні плеєри відхиляються під час перевірки
Fire TV (IMA SDK)
- Використовує реалізацію Android ExoPlayer + IMA SDK, адаптовану для Leanback UI Fire TV
- Навігація D-pad для кнопки пропуску та переходу "Дізнатися більше" на рекламних оверлеях
- Fire TV Ad ID використовується для таргетингу реклами в VAST запитах
Apple TV (AVKit + Custom)
AVPlayerViewController з interstitialTimeRanges для нативних UI індикаторів рекламних пауз
- Маркери SCTE-35 парсяться через
AVPlayerItemMetadataCollector
- Відтворення реклами керується в окремому
AVQueuePlayer для чистого розділення контенту/реклами
- Обробник кліків з пульта tvOS для інтерактивних рекламних елементів
Управління рекламними блоками
- Заповнення блоку — Кілька VAST рекламних оголошень збираються для заповнення зазначеної тривалості паузи
- Каскад (Waterfall) — Якщо первинний рекламний сервер повертає "без заповнення", вторинні/третинні джерела попиту запитуються послідовно
- Підбір тривалості — Будівник блоку вибирає комбінації оголошень, що вписуються в тривалість паузи (±0.5с допуск)
- Дедуплікація — Той самий рекламний креатив не показується двічі в одному блоці
- Обмеження частоти показів — Обмеження на одного користувача, на одну сесію застосовуються на стороні клієнта, щоб уникнути втоми від реклами
- Бампери — Короткі бамперні креативи ("Ми скоро повернемося" / "Ласкаво просимо назад") огортають рекламні блоки
Відстеження рекламних подій та аналітика
- Стандартні VAST події —
impression, start, firstQuartile, midpoint, thirdQuartile, complete, skip, clickThrough
- Видимість — Пікселі видимості MOAT/IAS спрацьовують на основі видимості рекламного вікна перегляду та порогів тривалості
- Користувацькі події — Події на рівні програми (початок/кінець рекламної паузи, показник заповнення блоку, час попереднього завантаження, спрацювання відкату)
- Серверний конвеєр — Клієнт надсилає події до легкого збирача подій, який розсилає їх до GAM, MOAT та внутрішнього аналітичного сховища
- Звірка — Звірка журналів на стороні сервера з подіями на стороні клієнта для виявлення розбіжностей
Обробка блокувальників реклами (Веб)
- Виявлення — "Канарковий" VAST запит до відомого рекламного домену; тайм-аут або блокування вказує на блокувальник реклами
- Стратегія відкату — Показувати внутрішню рекламу або промо-трейлери з CDN домену першої сторони
- Обмеження доступу до контенту — Опціональний "м'який" гейт: запропонувати користувачу внести сайт до білого списку перед відтворенням контенту
- Аналітика — Частота виявлення блокувальників реклами відстежується за браузером, географією та сторінкою
Ключові особливості
- Кросплатформенна CSAI — Уніфікована вставка реклами для веб, iOS, Android, Roku, Fire TV та Apple TV
- Парсинг SCTE-35 на клієнті — Парсинг HLS
EXT-X-DATERANGE, CUE-OUT/IN та DASH EventStream
- Інтерактивна реклама — Натискні оверлеї, супутні банери та кнопки пропуску на всіх платформах
- Оркестрація рекламних блоків — Заповнення багатослотових рекламних пауз за допомогою каскаду, підбору тривалості та дедуплікації
- Попереднє завантаження — Рекламні креативи попередньо завантажуються під час відтворення контенту для рекламних переходів без затримок
- Відстеження видимості — Інтеграція MOAT/IAS для вимог видимості від покупців преміум-реклами
- Відповідність вимогам підключених телевізорів — Інтеграції Roku RAF, Fire TV IMA та Apple TV AVKit, що відповідають вимогам сертифікації
- Стійкість до блокувальників реклами — Виявлення та відкат до внутрішньої реклами першої сторони на веб-платформі