Mit Pod-Auslieferung mit dynamischer Anzeigenbereitstellung einrichten

Plattform auswählen: HTML5 Android iOS tvOS Cast Roku

In diesem Leitfaden wird gezeigt, wie Sie einen Live- oder VOD-Stream mit Pod-Auslieferung mit dynamischer Anzeigenbereitstellung mithilfe des IMA DAI SDK für tvOS mit einem Videoplayer abspielen. Wenn Sie sich eine vollständige Beispielintegration ansehen oder sie nachvollziehen möchten, laden Sie die Beispiel-App für die Pod-Auslieferung (Obj C oder Swift) herunter.

IMA DAI Pod-Auslieferung – Übersicht

Die Implementierung der Pod-Auslieferung mit dem IMA DAI SDK für tvOS umfasst zwei Hauptkomponenten:

  • StreamRequest: Ein Objekt, das eine Streamanfrage an die Ad-Server von Google definiert. Muss entweder mit IMAPodStreamRequest oder IMAPodVODStreamRequest erstellt werden, um die Pod-Auslieferung zu aktivieren. Für beide Methoden ist ein Netzwerkcode erforderlich. Für IMAPodStreamRequest wird außerdem ein benutzerdefinierter Asset-Schlüssel benötigt. Ein API-Schlüssel ist optional.

  • IMAStreamManager: Ein Objekt, das die Kommunikation zwischen dem Videostream und dem IMA DAI SDK übernimmt, z. B. das Auslösen von Tracking-Pings und das Weiterleiten von Stream-Ereignissen an den Publisher.

Vorbereitung

Für den Start ist Folgendes erforderlich:

  • Xcode 13 oder höher
  • Methode zur Installation des IMA SDK:
  • Eine tvOS-App, die bereits mit dem IMA DAI SDK eingerichtet ist, um Videostreams mit DAI-Anzeigen abzuspielen. Wenn Sie noch keine solche App haben, empfehlen wir, das tvOS DAI BasicExample als Ausgangspunkt zu verwenden. Das BasicExample enthält die Codebasis, auf die in diesem Leitfaden verwiesen wird. Weitere Informationen zur Implementierung des IMA DAI SDK finden Sie in der Kurzanleitung.

Variablen für die Pod-Auslieferung einrichten

Nehmen Sie alle Änderungen für die Pod-Bereitstellung in ViewController.swift in Swift oder ViewController.m in Objective-C vor. In den Snippets in diesem Leitfaden wird standardmäßig die Sprache Swift verwendet. Der erste Schritt besteht darin, die konstanten Variablen zu aktualisieren.

Fügen Sie die folgenden Konstanten für die Anzeigen-Pod-Stream-Anfrage hinzu:

  • STREAM_URL (nur für Livestreams): Die URL des Videostreams, die von deinem Manifestmanipulator oder Drittanbieter über die Pod-Auslieferung bereitgestellt wird. Sie müssen die vom IMA DAI SDK bereitgestellte Stream-ID einfügen, bevor Sie eine Anfrage stellen. In diesem Fall enthält die Stream-URL einen Platzhalter, "[[STREAMID]]", den Sie vor dem Senden einer Anfrage durch die Stream-ID ersetzen.
  • NETWORK_CODE: Der Netzwerkcode für Ihr Ad Manager 360-Konto.
  • CUSTOM_ASSET_KEY (Nur für Livestreams verwendet): Der benutzerdefinierte Asset-Schlüssel, mit dem Ihr Pod-Auslieferungsereignis in Ad Manager 360 identifiziert wird. Diese kann von Ihrem Manifest-Manipulator oder Drittanbieter-Pod-Auslieferungspartner erstellt werden.
  • API_KEY (nur für Livestreams verwendet): Ein optionaler API-Schlüssel, der erforderlich sein kann, um eine Stream-ID vom IMA DAI SDK abzurufen.

Ändern Sie den Variablenabschnitt des Beispiels so:

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

  var adsLoader: IMAAdsLoader?
  ...

Erstellen Sie entweder eine Anfrage für einen Live- oder einen VOD-Pod-Stream.

Livestream-Pod-Bereitstellung

Ändern Sie die Methode requestStream, um eine Anfrage für einen Live-Pod-Stream zu erstellen. Instanziieren Sie dazu 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-Auslieferung für VOD-Streams

Ändern Sie die Methode requestStream, um eine VOD-Pod-Stream-Anfrage zu erstellen, indem Sie IMAPodVODStreamRequest instanziieren.

  ...

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

  ...

Stream-URL bearbeiten und festlegen

Livestream-Pod-Bereitstellung

Ändern Sie die IMAAdsLoaderDelegate-Methoden und verwenden Sie streamManager.streamId, um die Stream-ID abzurufen. Fügen Sie dann die Stream-ID in den STREAM_URL ein und ersetzen Sie dabei "[[STREAMID]]". Nachdem Sie diese Änderung vorgenommen haben, legen Sie die neue Stream-URL mit videoDisplay.loadStream() fest.

  ...

  // 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-Auslieferung für VOD-Streams

Ändern Sie die IMAAdsLoaderDelegate-Methoden und verwenden Sie streamManager.streamId, um die Stream-ID abzurufen. Fordern Sie dann eine Stream-URL von Ihrem Videotechnologiepartner (VTP) an und rufen Sie IMAStreamManager.loadThirdPartyStream() auf, damit IMA die Stream-URL und alle von Ihrem TVP zurückgegebenen Untertitel lädt.

  ...

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

Wenn Sie Anzeigen in einem Pod-Bereitstellungsstream mit dem IMA DAI SDK angefordert und angezeigt haben, sollten Sie alle Ressourcen nach Abschluss der Pod-Bereitstellungssitzung bereinigen. Rufen Sie IMAStreamManager.destroy() auf, um die Streamwiedergabe zu beenden, das gesamte Anzeigen-Tracking zu beenden und alle geladenen Stream-Assets freizugeben.

Weitere Beispiele für die Verwendung des tvOS SDK finden Sie in den Beispielen auf GitHub.