Premiers pas avec le SDK IMA DAI

Les SDK IMA facilitent l'intégration d'annonces multimédias dans vos sites Web et applications. Les SDK IMA peuvent demander des annonces à n'importe quel ad server compatible avec VAST et gérer la lecture des annonces dans vos applications. Avec les SDK IMA pour l'insertion dynamique d'annonce, les applications envoient une demande de flux pour l'annonce et le contenu vidéo (VOD ou contenu en direct). Le SDK renvoie ensuite un flux vidéo combiné, ce qui vous évite d'avoir à gérer le basculement entre les annonces et les vidéos de contenu dans votre application.

Sélectionnez la solution d'insertion dynamique d'annonce qui vous intéresse.

Insertion dynamique de séries d'annonces

Ce guide explique comment lire un flux en direct ou de vidéo à la demande pour l'insertion dynamique de séries d'annonces dans tvOS à l'aide du SDK IMA DAI pour tvOS. Si vous souhaitez suivre un exemple terminé, téléchargez l'application exemple de diffusion de pods (Obj C ou Swift).

Présentation de l'insertion dynamique de séries d'annonces via le SDK IMA

L'implémentation de la diffusion de séries d'annonces à l'aide du SDK IMA DAI pour tvOS implique deux composants principaux:

  • StreamRequest: objet qui définit une requête de flux vers les serveurs publicitaires de Google. Doit être créé à l'aide de IMAPodStreamRequest ou de IMAPodVODStreamRequest pour activer la diffusion de pods. Les deux méthodes nécessitent un code de réseau, et IMAPodStreamRequest nécessite également une clé d'élément personnalisée. Une clé API est facultative.

  • IMAStreamManager: objet qui gère la communication entre le flux vidéo et le SDK IMA pour l'insertion dynamique d'annonce, comme le déclenchement des pings de suivi et le transfert des événements de flux à l'éditeur.

Prérequis

Avant de commencer, vous avez besoin des éléments suivants :

  • Xcode 13 ou version ultérieure
  • CocoaPods (recommandé), Swift Package Manager ou une copie téléchargée du SDK IMA pour l'insertion dynamique d'annonce pour tvOS.
  • Une application tvOS déjà configurée avec le SDK IMA pour l'insertion dynamique d'annonce afin de lire des flux vidéo avec des annonces d'insertion dynamique d'annonce. Si vous ne disposez pas encore de ce type d'application, nous vous recommandons d'utiliser tvOS DAI BasicExample comme point de départ. BasicExample utilise le codebase référencé dans ce guide. Pour en savoir plus sur la mise en œuvre du SDK IMA DAI, consultez le guide de démarrage rapide.

Configurer les variables de diffusion de pods

Toutes les modifications nécessaires pour la diffusion de pods sont effectuées dans ViewController.swift en Swift ou ViewController.m dans Objective-C. Les extraits de ce guide utilisent par défaut le langage Swift. La première étape consiste à mettre à jour les variables constantes.

Voici les constantes de demande de flux de séries d'annonces à ajouter:

  • STREAM_URL (uniquement pour les diffusions en direct): URL du flux vidéo fournie par votre outil de manipulation du fichier manifeste ou par votre partenaire tiers utilisant la diffusion de séries d'annonces. Avant d'envoyer une demande, vous devez insérer l'ID de flux fourni par le SDK IMA pour l'insertion dynamique d'annonce. Dans ce cas, l'URL de flux inclut un espace réservé, "[[STREAMID]]", qui est remplacé par l'ID de flux, avant d'envoyer une requête.
  • NETWORK_CODE: code de réseau de votre compte Ad Manager 360.
  • CUSTOM_ASSET_KEY (utilisée uniquement pour les diffusions en direct): clé d'élément personnalisé qui identifie l'événement de diffusion de séries d'annonces dans Ad Manager 360. Il peut être créé par votre outil de manipulation du fichier manifeste ou votre partenaire tiers de diffusion de pods.
  • API_KEY (uniquement pour les diffusions en direct): clé API facultative pouvant être requise pour récupérer un ID de flux à partir du SDK IMA pour l'insertion dynamique d'annonce.

Modifiez la section des variables de l'exemple pour qu'elle corresponde à ce qui suit:

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

Créer une demande de diffusion de pod en direct ou de vidéo à la demande

Diffusion de séries d'annonces en direct

Modifiez la méthode requestStream pour créer une requête de flux de pod en direct en instanciant 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)
  }

  ...

Diffusion de séries d'annonces de flux VOD

Modifiez la méthode requestStream pour créer une requête de flux de pod de VOD en instanciant 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)
  }

  ...

Modifier et définir l'URL du flux

Diffusion de séries d'annonces en direct

Modifiez les méthodes IMAAdsLoaderDelegate à l'aide de streamManager.streamId pour obtenir l'ID de flux. Insérez ensuite l'ID de flux dans STREAM_URL, en remplaçant "[[STREAMID]]". Une fois cette modification effectuée, vous pouvez définir la nouvelle URL de flux à l'aide de 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
  }

  ...

Diffusion de séries d'annonces de flux VOD

Modifiez les méthodes IMAAdsLoaderDelegate à l'aide de streamManager.streamId pour obtenir l'ID de flux. Demandez ensuite une URL de flux à votre partenaire technologique vidéo (VTP) et appelez IMAStreamManager.loadThirdPartyStream() pour que IMA charge l'URL de flux et tous les sous-titres renvoyés par votre 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
  }

Et voilà ! Vous demandez et affichez maintenant des annonces dans un flux de diffusion de séries d'annonces avec le SDK IMA DAI pour tvOS. Pour voir d'autres exemples d'utilisation du SDK IMA pour l'insertion dynamique d'annonce, consultez les exemples sur GitHub.