Einführung in das IMA DAI SDK

Mit IMA SDKs können Sie Multimedia-Anzeigen ganz einfach in Ihre Websites und Apps einbinden. IMA SDKs können Anzeigen von jedem VAST-kompatiblen Ad-Server anfordern und die Anzeigenwiedergabe in Ihren Apps verwalten. Mit IMA DAI SDKs senden Apps Streamanfragen für Anzeigen- und Contentvideos – entweder für VOD oder Livecontent. Das SDK gibt dann einen kombinierten Videostream zurück, sodass Sie in Ihrer App nicht mehr zwischen Anzeige- und Contentvideo wechseln müssen.

Gewünschte Lösung für die dynamische Anzeigenbereitstellung auswählen

Dynamische Anzeigenbereitstellung für die Pod-Auslieferung

In dieser Anleitung wird beschrieben, wie Sie mit dem IMA DAI SDK für iOS einen Live- oder VOD-Stream für die Pod-Auslieferung mit dynamischer Anzeigenbereitstellung über einen einfachen Videoplayer wiedergeben. Wenn Sie ein vollständiges Beispiel verwenden möchten, laden Sie das Beispiel für die Pod-Bereitstellung herunter.

Pod-Auslieferung mit der dynamischen Anzeigenbereitstellung von IMA – Übersicht

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

  • StreamRequest: Ein Objekt, das eine Streamanfrage an die Werbeserver von Google definiert. Muss mit IMAPodStreamRequest oder IMAPodVODStreamRequest erstellt werden, um die Pod-Bereitstellung zu aktivieren. Für beide Methoden ist ein Netzwerkcode erforderlich und für IMAPodStreamRequest ist auch 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 steuert, z. B. das Auslösen von Tracking-Pings und das Weiterleiten von Streamereignissen an den Publisher.

Voraussetzungen

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 iOS
  • Eine iOS-App, die bereits mit dem IMA DAI SDK eingerichtet ist, um Videostreams mit Anzeigen für die dynamische Anzeigenbereitstellung abzuspielen. Wenn Sie noch keine solche App haben, empfehlen wir als Ausgangspunkt das BasicExample für die dynamische Anzeigenbereitstellung für iOS. Das BasicExample verwendet die Codebasis, auf die in diesem Leitfaden verwiesen wird. Weitere Informationen zum Implementieren 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. Für die Snippets in diesem Leitfaden wird standardmäßig die Sprache Swift verwendet. Der erste Schritt besteht darin, die konstanten Variablen zu aktualisieren.

Dies sind die Konstanten für die Ad-Pod-Stream-Anfragen, die hinzugefügt werden sollen:

  • STREAM_URL (nur für Livestreams verwendet): Die Videostream-URL, die von der Manifestbearbeitung oder einem Drittanbieter mit Pod-Auslieferung bereitgestellt wird. Sie müssen die vom IMA DAI SDK bereitgestellte Stream-ID einfügen, bevor Sie eine Anfrage stellen können. In diesem Fall enthält die Stream-URL den Platzhalter "[[STREAMID]]", der vor der 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 Assetschlüssel, der das Pod-Auslieferungsereignis in Ad Manager 360 identifiziert. Sie kann von Ihrem Manifest-Manager oder einem Drittanbieter für die Pod-Auslieferung erstellt werden.
  • API_KEY (nur für Livestreams verwendet): Ein optionaler API-Schlüssel, der unter Umständen erforderlich ist, um eine Stream-ID aus dem IMA DAI SDK abzurufen.

Ändern Sie den Variablenabschnitt des Beispiels so, dass er wie folgt aussieht:

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

Pod-Stream-Anfrage für Live- oder VOD-Streams erstellen

Pod-Auslieferung im Livestream

Ändern Sie die Methode requestStream, um eine Live-Pod-Stream-Anfrage zu erstellen, indem Sie IMAPodStreamRequest 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 = IMAPodStreamRequest(
      networkCode: self.networkCode,
      customAssetKey: self.customAssetKey,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

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

Pod-Auslieferung im Livestream

Ändern Sie die IMAAdsLoaderDelegate-Methoden mit streamManager.streamId, um die Stream-ID abzurufen. Fügen Sie dann die Stream-ID in STREAM_URL ein und ersetzen Sie dabei "[[STREAMID]]". 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
  }

  ...

Pod-Auslieferung von VOD-Streams

Ändern Sie die IMAAdsLoaderDelegate-Methoden mit streamManager.streamId, um die Stream-ID abzurufen. Fordern Sie dann eine Stream-URL bei Ihrem Videotechnologiepartner (VTP) an. Rufen Sie dann 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
  }

Fertig! Sie verwenden jetzt das IMA DAI SDK für iOS, um Anzeigen in einem Pod-Auslieferungsstream anzufordern und auszuliefern. Weitere Beispiele für das verwendete IMA DAI SDK finden Sie in den Beispielen auf GitHub.