Einführung in das IMA DAI SDK

Mit IMA SDKs lassen sich Multimedia-Anzeigen ganz einfach in Websites und Apps einbinden. Mit IMA SDKs können Anzeigen von jedem VAST-kompatiblen Ad-Server angefordert und die Anzeigenwiedergabe in Ihren Apps verwaltet werden. Mit IMA DAI SDKs senden Apps eine Streamanfrage für Anzeigen- und Videoinhalte – entweder VOD- oder Liveinhalte. Das SDK gibt dann einen kombinierten Videostream zurück, sodass Sie nicht zwischen Anzeigen- und Inhaltsvideo in Ihrer App wechseln müssen.

Wählen Sie die gewünschte dynamische Anzeigenbereitstellungslösung aus.

Pod-Auslieferung mit dynamischer Anzeigenbereitstellung

In dieser Anleitung wird gezeigt, wie du einen Livestream oder VOD-Stream mit dynamischer Anzeigenbereitstellung mit dem IMA DAI SDK für tvOS und einem Videoplayer wiedergibst. Wenn Sie sich eine fertige Beispielintegration ansehen oder nachvollziehen möchten, laden Sie die Beispiel-App für die Pod-Auslieferung (Obj C oder Swift) herunter.

IMA DAI Pod Serving – Ü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 Werbeserver 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 ist außerdem ein benutzerdefinierter Asset-Schlüssel erforderlich. Ein API-Schlüssel ist optional.

  • IMAStreamManager: Ein Objekt, das die Kommunikation zwischen dem Videostream und dem IMA DAI SDK verwaltet, 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
  • CocoaPods (bevorzugt), Swift Package Manager oder eine heruntergeladene Kopie des IMA DAI SDK für tvOS
  • 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 als Ausgangspunkt das tvOS DAI BasicExample. Das BasicExample enthält den Code, auf den 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

Alle für die Pod-Bereitstellung erforderlichen Änderungen werden in ViewController.swift in Swift oder ViewController.m in Objective-C vorgenommen. In den Snippets in diesem Leitfaden wird standardmäßig die Swift-Programmiersprache verwendet. Aktualisieren Sie als Erstes die Konstantenvariablen.

Hier sind die Konstanten für Anzeigen-Pod-Streamanfragen, die hinzugefügt werden müssen:

  • STREAM_URL (Nur für Livestreams verwendet): Die Videostream-URL, die von deinem Manifest-Manipulator oder Drittanbieterpartner mit Pod-Auslieferung bereitgestellt wird. Du solltest die vom IMA DAI SDK bereitgestellte Stream-ID eingeben müssen, bevor du eine Anfrage sendest. In diesem Fall enthält die Stream-URL den Platzhalter "[[STREAMID]]", der vor dem Senden einer Anfrage durch die Stream-ID ersetzt wird.
  • 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 das Pod-Auslieferungsereignis in Ad Manager 360 identifiziert wird. Dieser kann von deinem Manifest-Bearbeiter oder einem Drittanbieter für die Pod-Auslieferung erstellt werden.
  • API_KEY (Nur für Livestreams verwendet): Optionaler API-Schlüssel, der zum Abrufen einer Stream-ID aus dem IMA DAI SDK erforderlich sein kann.

Ändern Sie den Variablenbereich des Beispiels so:

...
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?
  ...

Erstelle eine Anfrage für einen Livestream- oder VOD-Pod-Stream.

Bereitstellung von Livestream-Pods

Ändere die requestStream-Methode, um eine Live-Pod-Streamanfrage zu erstellen, indem du IMAPodStreamRequest instanzierst.

  ...

  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-Stream-Pod-Auslieferung

Ändere die requestStream-Methode, um eine VOD-Pod-Streamanfrage zu erstellen, indem du IMAPodVODStreamRequest instanzierst.

  ...

  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

Bereitstellung von Livestream-Pods

Ändern Sie die IMAAdsLoaderDelegate-Methoden und verwenden Sie streamManager.streamId, um die Stream-ID abzurufen. Füge dann die Stream-ID anstelle von "[[STREAMID]]" in STREAM_URL ein. Nachdem diese Änderung vorgenommen wurde, kann die neue Stream-URL mit videoDisplay.loadStream() festgelegt werden.

  ...

  // 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-Stream-Pod-Auslieferung

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

  ...

  // 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 du Anzeigen in einem Pod-Auslieferungsstream mit dem IMA DAI SDK angefordert und ausgeliefert hast, solltest du nach Abschluss der Pod-Auslieferungssitzung alle Ressourcen bereinigen. Rufe IMAStreamManager.destroy() auf, um die Streamwiedergabe zu beenden, alle Anzeigen zu erfassen und alle geladenen Stream-Assets freizugeben.

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