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

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

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

Обслуживание капсул DAI

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

Обзор обслуживания IMA DAI Pod

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

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

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

Предпосылки

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

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

Настройте переменные обслуживания Pod

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

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

  • STREAM_URL ( используется только для прямых трансляций ): URL-адрес видеопотока, предоставленный вашим манипулятором манифеста или сторонним партнёром, использующим Pod Serving. Перед отправкой запроса необходимо указать идентификатор потока, предоставленный IMA DAI SDK. В этом случае URL-адрес потока включает заглушку "[[STREAMID]]" , которая заменяется идентификатором потока перед отправкой запроса.
  • NETWORK_CODE : сетевой код вашей учетной записи Менеджера рекламы 360.
  • CUSTOM_ASSET_KEY ( используется только для прямых трансляций ): пользовательский ключ актива, который идентифицирует ваше событие обслуживания Pod в Менеджере рекламы 360. Его может создать ваш манипулятор манифестов или сторонний партнер по обслуживанию Pod.
  • API_KEY ( используется только для прямых трансляций ): необязательный ключ API, который может потребоваться для получения идентификатора потока из 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?
  ...

Создайте запрос на прямую трансляцию или VOD-трансляцию

Обслуживание Pod в режиме реального времени

Измените метод requestStream , чтобы создать запрос потока Pod в реальном времени путем создания экземпляра 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)
  }

  ...

Обслуживание Pod-контента VOD-трансляций

Измените метод requestStream для создания запроса потока VOD-pod путем создания экземпляра 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-адрес потока

Обслуживание Pod в режиме реального времени

Измените методы 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
  }

  ...

Обслуживание Pod-контента VOD-трансляций

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

  ...

  // 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

После успешного запроса и отображения рекламы в потоке Pod Serving с помощью IMA DAI SDK рекомендуем очистить все ресурсы после завершения сеанса Pod Serving. Вызовите IMAStreamManager.destroy() , чтобы остановить воспроизведение потока, остановить всё отслеживание рекламы и освободить все загруженные ресурсы потока.

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