Как настроить IMA SDK для динамической вставки объявлений

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

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

Выберите решение для динамической вставки объявлений

Показ пакетов с динамической вставкой объявлений

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

Общие сведения о показе пакетов с динамической вставкой объявлений в IMA DAI

Чтобы реализовать показ пакетов с помощью IMA DAI SDK для tvOS, вам понадобятся два основных компонента:

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

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

Требования

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

  • Xcode 13 или более поздней версии.
  • Способ установки IMA SDK:
  • Приложение для tvOS, в котором уже настроен IMA DAI SDK для воспроизведения видеопотоков с объявлениями DAI. Если у вас нет такого приложения, рекомендуем использовать в качестве отправной точки tvOS DAI BasicExample. В BasicExample есть база кода, на которую ссылается это руководство. Подробнее о том, как реализовать IMA DAI SDK, рассказывается в кратком руководстве.

Как настроить переменные для показа пакетов

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

Добавьте следующие константы запроса потока пакета объявлений:

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

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

Показ пакетов в прямых трансляциях

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

  ...

Показ пакетов в видеопотоке по запросу

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

  ...

Показ пакетов в видеопотоке по запросу

Измените методы IMAAdsLoaderDelegate, используя streamManager.streamId, чтобы получить идентификатор потока. Затем запросите URL трансляции у своего партнера по видеотехнологиям и вызовите функцию 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

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

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