Utiliser le SDK IMA pour l'insertion dynamique d'annonce sur Roku

Lire les diffusions en direct enregistrées avec l'API Google Cloud Video Stitcher

Ce guide explique comment utiliser le SDK DAI IMA pour Roku afin de demander et de lire une diffusion en direct pour un événement enregistré avec l'API Google Cloud Video Stitcher, et comment insérer une coupure publicitaire pendant la lecture.

Ce guide développe l'exemple de base du guide de démarrage pour la diffusion d'annonces interstitielles IMA.

Pour en savoir plus sur l'intégration à d'autres plates-formes ou sur l'utilisation des SDK côté client IMA, consultez la page SDK Interactive Media Ads.

Si vous souhaitez consulter ou suivre un exemple d'intégration terminée, téléchargez l'exemple d'assembleur vidéo Cloud.

Configurer un projet Google Cloud

Saisissez les variables suivantes à utiliser dans le SDK IMA:

Emplacement
Région Google Cloud dans laquelle votre configuration en production a été créée : LOCATION
Numéro du projet
Numéro du projet Google Cloud utilisant l'API Video Stitcher : PROJECT_NUMBER
Jeton OAuth

Le jeton OAuth de courte durée d'un compte de service avec le rôle utilisateur Video Stitcher:

OAUTH_TOKEN

Découvrez comment créer des identifiants éphémères pour des comptes de service. Le jeton OAuth peut être réutilisé pour plusieurs requêtes tant qu'il n'a pas expiré.

Code de réseau

Code de réseau Ad Manager pour demander des annonces : NETWORK_CODE

ID de configuration en direct
ID de configuration de diffusion en direct que vous avez spécifié lors de la création de votre événement de diffusion en direct : LIVE_CONFIG_ID
Clé d'élément personnalisée
Clé d'élément personnalisé Ad Manager générée lors du processus de création d'une configuration pour un événement en direct avec l'API Video Stitcher : CUSTOM_ASSET_KEY

Télécharger l'exemple de base

Téléchargez et exécutez l'exemple de base de l'insertion dynamique d'annonces IMA pour Roku. Cliquez sur le bouton de lecture du lecteur vidéo pour lancer le court-métrage "Tears of Steel", qui contient des coupures publicitaires toutes les 30 secondes.

Demander une diffusion en direct

Pour remplacer le flux d'exemple par votre flux en direct Cloud Video Stitcher, utilisez la fonction sdk.createVideoStitcherLiveStreamRequest(). Une fois votre session DAI mise en ligne, vous pouvez utiliser l'interface utilisateur de Google Ad Manager pour localiser les sessions DAI générées à des fins de surveillance et de débogage.

Dans l'exemple existant, des instructions conditionnelles déterminent si une StreamRequest VOD ou une StreamRequest en direct doit être créée. Pour qu'il fonctionne avec l'API Google Cloud Video Stitcher, ajoutez un nouveau chemin d'accès pour créer un StreamRequest Cloud Video Stitcher en direct à l'aide des valeurs générées précédemment.

Exemple

basic_example/components/MainScene.xml

<?xml version="1.0" encoding="utf-8" ?>
<component name="MainScene" extends="Scene" initialFocus = "myVideo">
<script type="text/brightscript">
<![CDATA[
  function init()
    m.video = m.top.findNode("myVideo")
    m.video.notificationinterval = 1
    m.testLiveStream = {
      title: "Livestream",
      assetKey: "c-rArva4ShKVIAkNfy6HUQ",
      apiKey: "",
      type: "live"
    }
    m.testVodStream = {
      title: "VOD stream"
      contentSourceId: "2548831",
      videoId: "tears-of-steel",
      apiKey: "",
      type: "vod"
    }
    m.testVideoStitcherLiveStream = {
      title: "Video Stitcher Livestream",
      customAssetKey: "CUSTOM_ASSET_KEY",
      networkCode: "NETWORK_CODE",
      liveConfigId: "LIVE_CONFIG_ID",
      region: "LOCATION",
      projectNumber: "PROJECT_NUMBER",
      oAuthToken: "OAUTH_TOKEN",
      apiKey: "",
      type: "stitcherLive"
    }
    loadImaSdk()
  end function

  function loadImaSdk() as void
    m.sdkTask = createObject("roSGNode", "imasdk")
    m.sdkTask.observeField("sdkLoaded", "onSdkLoaded")
    m.sdkTask.observeField("errors", "onSdkLoadedError")

    ' Set this to the stream data you would like to play.
    selectedStream = m.testVideoStitcherLiveStream
    m.videoTitle = selectedStream.title
    m.sdkTask.streamData = selectedStream

    m.sdkTask.observeField("urlData", "urlLoadRequested")
    m.sdkTask.video = m.video
    ' Setting control to run starts the task thread.
    m.sdkTask.control = "RUN"
  end function

basic_example/components/Sdk.xml

  Sub loadStream()
    sdk = m.sdk
    sdk.initSdk()
    setupVideoPlayer()

    request = {}
    streamData = m.top.streamData
    if streamData.type = "live"
      request = sdk.CreateLiveStreamRequest(streamData.assetKey, streamData.apiKey)
    else if streamData.type = "vod"
      request = sdk.CreateVodStreamRequest(streamData.contentSourceId, streamData.videoId, streamData.apiKey)
    else if streamData.type = "stitcherLive"
      request = sdk.CreateVideoStitcherLiveStreamRequest(
        streamData.customAssetKey,
        streamData.networkCode,
        streamData.liveConfigId,
        streamData.region,
        streamData.projectNumber,
        streamData.oAuthToken
      )
    else
      request = sdk.CreateStreamRequest()
    end if

    request.player = m.player
    request.adUiNode = m.top.video

    requestResult = sdk.requestStream(request)
    If requestResult <> Invalid
      print "Error requesting stream ";requestResult
    Else
      m.streamManager = Invalid
      While m.streamManager = Invalid
        sleep(50)
        m.streamManager = sdk.getStreamManager()
      End While
      If m.streamManager = Invalid or m.streamManager["type"] <> Invalid or m.streamManager["type"] = "error"
        errors = CreateObject("roArray", 1, True)
        print "error ";m.streamManager["info"]
        errors.push(m.streamManager["info"])
        m.top.errors = errors
      Else
        m.top.streamManagerReady = True
        addCallbacks()
        m.streamManager.start()
      End If
    End If
  End Sub

Une fois ces modifications apportées, actualisez l'application pour demander et lire votre diffusion en direct personnalisée.

(Facultatif) Ajouter des options de session de streaming

Personnalisez votre requête de flux en ajoutant des options de session pour remplacer la configuration par défaut de l'API Cloud Video Stitcher en renseignant le paramètre videoStitcherSessionOptions dans votre objet StreamRequest.

Si vous fournissez une option non reconnue, l'API Cloud Video Stitcher répondra par une erreur HTTP 400. Pour obtenir de l'aide, consultez le guide de dépannage.

Par exemple, vous pouvez remplacer les options de fichier manifeste avec l'extrait de code suivant, qui demande deux fichiers manifestes de flux avec des rendus triés du débit le plus bas au plus élevé.


request = sdk.createVideoStitcherLiveStreamRequest(customAssetKey, networkCode, liveConfigId, region, projectNumber, oAuthToken)

request.player = m.player
request.adUiNode = m.top.video

' The following session options are examples. Use session options
' that are compatible with your video stream.
sessionOptions = {
  "manifestOptions": {
    "bitrateOrder": "ascending"
  }
}
request.videoStitcherSessionOptions = sessionOptions

requestResult = sdk.requestStream(request)

Insérer une coupure publicitaire

L'API Google Cloud Video Stitcher insère les annonces extraites du tag d'annonce pour chaque coupure publicitaire. Les coupures publicitaires sont indiquées dans le fichier manifeste à l'aide de repères publicitaires. Les marqueurs d'annonces sont insérés par l'encodeur de diffusion en direct.

L'annonce est diffusée immédiatement après l'insertion de la coupure publicitaire.

Effectuer un nettoyage

Maintenant que vous avez hébergé une diffusion en direct à l'aide de l'API Google Cloud Video Stitcher et que vous l'avez demandée à l'aide du SDK IMA DAI pour Roku, il est important de nettoyer toutes les ressources de diffusion.

Suivez le guide de nettoyage des diffusions en direct pour supprimer toutes les ressources et composants inutiles.