Configurer avec l'insertion dynamique d'annonces (DAI) pour les pods

Sélectionner une plate-forme : HTML5 Android iOS tvOS Cast Roku

Ce guide explique comment lire un flux en direct ou de VOD avec l'insertion dynamique de séries d'annonces à l'aide du SDK IMA DAI pour tvOS avec un lecteur vidéo. Pour afficher ou suivre un exemple d'intégration complet, téléchargez l'exemple d'application d'insertion de séries d'annonces (Obj C ou Swift).

Présentation de l'insertion dynamique d'annonces IMA DAI

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

  • StreamRequest : objet qui définit une demande de flux adressée aux serveurs publicitaires de Google. Doit être créé à l'aide de IMAPodStreamRequest ou de IMAPodVODStreamRequest pour activer la diffusion de séries d'annonces. Les deux méthodes nécessitent un code réseau, et IMAPodStreamRequest nécessite également une clé d'élément personnalisée. La clé API est facultative.

  • IMAStreamManager : objet qui gère la communication entre le flux vidéo et le SDK IMA DAI, par exemple en déclenchant des pings de suivi et en transmettant les événements de flux à l'éditeur.

Prérequis

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

  • Xcode 13 ou version ultérieure.
  • Méthode d'installation du SDK IMA :
  • Une application tvOS déjà configurée avec le SDK IMA DAI pour lire des flux vidéo avec des annonces DAI. Si vous n'en avez pas encore, nous vous recommandons d'utiliser tvOS DAI BasicExample comme point de départ. BasicExample contient le codebase référencé dans ce guide. Pour en savoir plus sur l'implémentation du SDK IMA DAI, consultez le guide de démarrage rapide.

Configurer vos variables de diffusion de séries d'annonces

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

Ajoutez les constantes de requête de flux de série d'annonces suivantes :

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

Modifiez la section des variables de l'exemple pour qu'elle corresponde aux éléments suivants :

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

  var adsLoader: IMAAdsLoader?
  ...

Créer une demande de flux de série d'annonces en direct ou de VOD

Diffusion de pods de diffusion 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 dans un flux de VOD

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

Modifiez les méthodes IMAAdsLoaderDelegate en utilisant streamManager.streamId pour obtenir l'ID du flux. Insérez ensuite l'ID du flux dans STREAM_URL, en remplaçant "[[STREAMID]]". Après avoir effectué cette modification, définissez la nouvelle URL du 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 dans un flux de VOD

Modifiez les méthodes IMAAdsLoaderDelegate en utilisant streamManager.streamId pour obtenir l'ID du flux. Ensuite, demandez une URL de flux à votre partenaire de technologie vidéo (VTP) et appelez IMAStreamManager.loadThirdPartyStream() pour qu'IMA charge l'URL de flux et 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
  }

Nettoyer les assets IMA DAI

Une fois que vous avez demandé et affiché des annonces dans un flux de diffusion de séries d'annonces avec le SDK IMA DAI, nous vous suggérons de nettoyer toutes les ressources une fois la session de diffusion de séries d'annonces terminée. Appelez IMAStreamManager.destroy() pour arrêter la lecture du flux, arrêter tout suivi des annonces et libérer tous les éléments du flux chargé.

Pour voir d'autres exemples d'utilisation du SDK tvOS, consultez les exemples sur GitHub.