Начало работы с IMA DAI SDK

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

Выберите решение DAI, которое вас интересует

Модуль, обслуживающий DAI

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

Обзор обслуживания модулей IMA DAI

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

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

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

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

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

  • Xcode 13 или новее.
  • CocoaPods (предпочтительно), Swift Package Manager или загруженная копия IMA DAI SDK для tvOS .
  • Приложение 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 =
    "https://encodersim.sandbox.google.com/masterPlaylist/9c654d63-5373-4673-8c8d-6d92b66b9d46/master.m3u8?gen-seg-redirect=true&network=51636543&event=google-sample&pids=devrel4628000,devrel896000,devrel3528000,devrel1428000,devrel2628000,devrel1928000&seg-host=dai.google.com&stream_id=[[STREAMID]]"
  static let networkCode = "51636543"
  static let customAssetKey = "google-sample"
  static let APIKey = ""
  static let backupStreamURLString =
    "http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/master.m3u8"

  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)
  }

  ...

Обслуживание модуля 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-адрес потока и все субтитры, возвращенные вашим 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 SDK для tvOS. Чтобы увидеть другие примеры использования IMA DAI SDK, посмотрите образцы на GitHub .