Документация CTV Интеграция

CTV Integration

Connected TV и OTT реклама

1 Обзор и Стратегия

Специфика CTV

Среды Connected TV значительно различаются тем, как они работают с медиа:

Нативные среды

Android TV и tvOS используют нативный код (Java/Kotlin, Swift) и полноценные SDK.

Web-среды

Tizen и WebOS запускают HTML5/JS в браузерах с ограниченными ресурсами.

Универсальное решение: t=app

Рекомендовано для ВСЕХ CTV платформ

Для всех CTV платформ мы настоятельно рекомендуем использовать параметр t=app.

Стандартный запрос

Возвращает сложный JS (VPAID), который часто вызывает сбои на TV.

Запрос с t=app

Возвращает чистый VAST/MP4. Обеспечивает плавное воспроизведение и 100% fill rate.

Параметры запроса

Параметр Пример Описание
plc tv_preroll_home Placement ID
w 1920 Ширина (1920 для HD)
h 1080 Высота (1080 для HD)
t app Обязательно Форсирует VAST Wrapper (MP4)

2 Samsung Tizen и LG WebOS

Используйте Video.js + Google IMA SDK. Эта связка де-факто является стандартом для web-based Smart TV.

Реализация (main.js)

JavaScript
var player = videojs('tv_player');

// 1. Создание URL (t=app КРИТИЧЕН!)
var adTagUrl = "https://omnibox.digital/ads/direct?plc=tizen_preroll&w=1920&h=1080&t=app&cb=" + Date.now();

// 2. Конфигурация IMA
player.ima({
    id: 'tv_player',
    adTagUrl: adTagUrl,
    // Отключаем VPAID для стабильности на TV
    vpaidMode: google.ima.ImaSdkSettings.VpaidMode.DISABLED,
    showCountdown: true,
    showControlsForAds: false
});

// 3. Запуск
player.on('ready', function() {
    player.ima.initializeAdDisplayContainer();
    player.ima.requestAds();
    player.play();
});

3 Android TV

Используйте ExoPlayer + IMA Extension для нативной интеграции.

Kotlin
// t=app is REQUIRED for clean VAST
val adUrl = "https://omnibox.digital/ads/direct?plc=androidtv_preroll&w=1920&h=1080&t=app&cb=$cb"

val mediaItem = MediaItem.Builder()
    .setUri(contentUri)
    .setAdsConfiguration(
         MediaItem.AdsConfiguration.Builder(Uri.parse(adUrl)).build()
    )
    .build()

4 Apple TV (tvOS)

Используйте AVPlayer + Google IMA SDK.

Swift
requestAds() {
    // t=app is REQUIRED
    let adTagUrl = "https://omnibox.digital/ads/direct?plc=appletv_preroll&w=1920&h=1080&t=app&cb=\(cb)"
    
    let request = IMAAdsRequest(adTagUrl: adTagUrl, 
                                adDisplayContainer: adDisplayContainer, 
                                contentPlayhead: nil, 
                                userContext: nil)
    adsLoader.requestAds(with: request)
}

5 Кастомные плееры (C++ / Legacy)

Целевая аудитория

Samsung Orsay, Roku BrightScript, и старые STB с кастомными движками.

! Ручной Парсинг VAST

  • Запросите URL с t=app.
  • Если <Wrapper>: извлеките VASTAdTagURI и повторите запрос. Сохраните пиксели.
  • Если <InLine>: возьмите MediaFile (video/mp4) и играйте.
  • Файрите трекинг пиксели (impression, start, complete) вручную.

6 CTV Баннеры

Для показа баннеров поверх видео или в меню:

  • WebView Overlay Используйте прозрачный WebView поверх нативного интерфейса.
  • Стандартный Запрос НЕ используйте t=app. Загружайте баннерный URL напрямую в WebView.