Настройка IMA SDK для DAI

Выберите платформу: HTML5 Android iOS tvOS Cast Roku

SDK IMA упрощают интеграцию мультимедийной рекламы в ваши веб-сайты и приложения. SDK IMA могут запрашивать рекламу с любого рекламного сервера , совместимого с VAST , и управлять воспроизведением рекламы в ваших приложениях. С SDK IMA DAI приложения отправляют запрос на потоковое видео, включающее рекламу и контент — либо видео по запросу, либо прямой эфир. Затем SDK возвращает объединенный видеопоток, так что вам не нужно управлять переключением между рекламой и контентом внутри вашего приложения.

Выберите интересующее вас решение DAI.

Подача капсул DAI

В этом руководстве показано, как воспроизводить прямые трансляции или видео по запросу (VOD) из DAI Pod Serving с помощью IMA DAI SDK для tvOS на видеоплеере. Чтобы посмотреть или выполнить пример интеграции, загрузите пример приложения Pod Serving ( на языке Objective C или Swift ).

Обзор системы подачи напитков в капсулах IMA DAI

Реализация Pod Serving с использованием IMA DAI SDK для tvOS включает в себя два основных компонента:

  • StreamRequest : Объект, определяющий запрос потока на рекламные серверы Google. Для включения Pod Serving его необходимо создать с помощью IMAPodStreamRequest или IMAPodVODStreamRequest . Оба метода требуют сетевого кода , а IMAPodStreamRequest также требует пользовательского ключа ресурса . Ключ API является необязательным.

  • IMAStreamManager : Объект, который обрабатывает обмен данными между видеопотоком и SDK IMA DAI, например, отправляет запросы на отслеживание и пересылает события потока издателю.

Предварительные требования

Прежде чем начать, вам потребуется следующее:

  • Xcode 13 или более поздняя версия.
  • CocoaPods (предпочтительно), Swift Package Manager или загруженная копия IMA DAI SDK для tvOS .
  • Приложение tvOS, уже настроенное с использованием SDK IMA DAI, воспроизводит видеопотоки с рекламой DAI. Если у вас еще нет такого приложения, мы рекомендуем использовать tvOS DAI BasicExample в качестве отправной точки. В BasicExample содержится код, на который ссылается это руководство. Для получения дополнительной информации о том, как внедрить SDK IMA DAI, см. руководство по быстрому запуску .

Настройте переменные для запуска пода.

Все изменения, необходимые для Pod Serving, вносятся в файл ViewController.swift на Swift или ViewController.m на Objective-C. В приведенных в этом руководстве фрагментах кода по умолчанию используется язык Swift. Первым шагом является обновление константных переменных.

Вот константы запроса потока рекламных блоков, которые необходимо добавить:

  • STREAM_URL ( используется только для прямых трансляций ): URL видеопотока, предоставленный вашим манипулятором манифеста или сторонним партнером, использующим Pod Serving. Перед отправкой запроса необходимо указать идентификатор потока, предоставленный SDK IMA DAI. В данном случае URL потока содержит заполнитель "[[STREAMID]]" , который заменяется идентификатором потока перед отправкой запроса.
  • NETWORK_CODE : Сетевой код для вашей учетной записи Ad Manager 360.
  • CUSTOM_ASSET_KEY ( используется только для прямых трансляций ): пользовательский ключ ресурса, идентифицирующий событие Pod Serving в Ad Manager 360. Он может быть создан вашим манипулятором манифеста или сторонним партнером по Pod Serving.
  • API_KEY ( Only used for livestreams ): An optional API key that can be required to retrieve a stream ID from the IMA DAI SDK.

Измените раздел переменных в примере следующим образом:

...
class ViewController:
  UIViewController,
  IMAAdsLoaderDelegate,
  IMAStreamManagerDelegate,
  AVPlayerViewControllerDelegate
{
  static let streamUrl = ""
  static let networkCode = ""
  static let customAssetKey = ""
  static let APIKey = ""
  static let backupStreamURLString = ""

  var adsLoader: IMAAdsLoader?
  ...

Создайте запрос на прямую трансляцию или запись подкаста.

Livestream Pod Serving

Измените метод requestStream , чтобы он создавал запрос на потоковую передачу данных в реальном времени, создав экземпляр класса IMAPodStreamRequest .

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodStreamRequest(
      networkCode: self.networkCode,
      customAssetKey: self.customAssetKey,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

VOD-стриминг Под-сервис

Измените метод requestStream , чтобы он создавал запрос на потоковое воспроизведение VOD-видео, создав экземпляр класса IMAPodVODStreamRequest .

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodVODStreamRequest(
      networkCode: self.networkCode,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

Отредактируйте и задайте URL-адрес потока.

Прямая трансляция в формате подкаста

Измените методы IMAAdsLoaderDelegate , используя streamManager.streamId для получения идентификатора потока. Затем вставьте идентификатор потока в STREAM_URL , заменив "[[STREAMID]]" . После внесения этого изменения новый URL потока можно установить с помощью videoDisplay.loadStream() .

  ...

  // MARK: - IMAAdsLoaderDelegate
  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
    let loadedStreamUrl = URL(string:urlString)
    self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
    self.videoDisplay.play()
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

  ...

VOD-стриминг Под-сервис

Измените методы IMAAdsLoaderDelegate , используя streamManager.streamId для получения идентификатора потока. Затем запросите URL-адрес потока у вашего партнера по видеотехнологиям (VTP) и вызовите IMAStreamManager.loadThirdPartyStream() , чтобы IMA загрузила URL-адрес потока и любые субтитры, возвращенные вашим партнером по видеотехнологиям.

  ...

  // MARK: - IMAAdsLoaderDelegate
  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    // 'vtpInterface' is a place holder for your own video technology partner
    // (VTP) API calls.
    let streamUrl = vtpInterface.requestStreamURL(streamID)
    self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

Очистка активов IMA DAI

When you have successfully finished requesting and displaying ads in a Pod Serving stream with IMA DAI SDK, we suggest you clean up any resources after the Pod Serving session is complete. Call IMAStreamManager.destroy() to stop stream playback, stop all ad tracking, and release all of the loaded stream assets.

Другие примеры использования tvOS SDK можно найти на GitHub .