Usar el SDK de DAI de IMA en Roku

Reproducir emisiones en directo registradas con la API Google Cloud Video Stitcher

En esta guía se muestra cómo usar el SDK de IMA DAI para Roku con el fin de solicitar y reproducir una emisión en directo de un evento registrado con la API Video Stitcher de Google Cloud, así como insertar un bloque de anuncios durante la reproducción.

Esta guía amplía el ejemplo básico de la guía de inicio de IMA DAI.

Para obtener información sobre cómo integrar otras plataformas o usar los SDKs de IMA del lado del cliente, consulte SDKs de anuncios multimedia interactivos.

Si quieres ver o seguir una integración de ejemplo completa, descarga el ejemplo de Cloud Video Stitcher.

Configura un proyecto de Google Cloud.

Introduzca las siguientes variables para usarlas en el SDK de IMA:

Ubicación
La región de Google Cloud en la que se creó tu configuración activa: LOCATION
Número de proyecto
Número de proyecto de Google Cloud que usa la API Video Stitcher: PROJECT_NUMBER
Token de OAuth

Token de OAuth de corta duración de una cuenta de servicio con el rol de usuario Video Stitcher:

OAUTH_TOKEN

Consulta más información sobre cómo crear credenciales de cuentas de servicio de duración reducida. El token de OAuth se puede reutilizar en varias solicitudes siempre que no haya caducado.

Código de red

El código de red de Ad Manager para solicitar anuncios: NETWORK_CODE

ID de configuración de la emisión en directo
El ID de configuración de la emisión en directo que especificaste al crear el evento: LIVE_CONFIG_ID
Clave de recurso personalizada
La clave de recurso personalizada de Ad Manager que se genera durante el proceso de creación de una configuración para un evento de emisión en directo con la API Video Stitcher: CUSTOM_ASSET_KEY

Descargar el ejemplo básico

Descarga y ejecuta el ejemplo básico de DAI de IMA para Roku. Haz clic en el botón de reproducción del reproductor de vídeo para ver el cortometraje "Tears of Steel", que contiene pausas publicitarias cada 30 segundos.

Solicitar una emisión en directo

Para sustituir la emisión de muestra por tu emisión en directo de Cloud Video Stitcher, usa la función sdk.createVideoStitcherLiveStreamRequest(). Una vez que tu sesión de inserción dinámica de anuncios esté activa, puedes usar la interfaz de usuario de Google Ad Manager para localizar las sesiones de inserción dinámica de anuncios generadas con fines de monitorización y depuración.

En el ejemplo, hay instrucciones condicionales para determinar si se debe crear un vídeo bajo demanda StreamRequest o un vídeo en directo StreamRequest. Para que funcione con la API Google Cloud Video Stitcher, añade una ruta nueva para crear un directo de Cloud Video Stitcher StreamRequest con los valores generados anteriormente.

Ejemplo

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

Una vez que hayas añadido estos cambios, vuelve a cargar la aplicación para solicitar y reproducir tu emisión en directo personalizada.

(Opcional) Añadir opciones de sesión de streaming

Para personalizar tu solicitud de emisión, añade opciones de sesión para anular la configuración predeterminada de la API Cloud Video Stitcher. Para ello, rellena el parámetro videoStitcherSessionOptions en tu objeto StreamRequest.

Si proporcionas una opción no reconocida, la API Cloud Video Stitcher responderá con un error HTTP 400. Consulta la guía de solución de problemas para obtener ayuda.

Por ejemplo, puedes anular las opciones del manifiesto con el siguiente fragmento de código, que solicita dos manifiestos de emisión con representaciones ordenadas de menor a mayor tasa de bits.


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)

Insertar una pausa publicitaria

La API Google Cloud Video Stitcher inserta anuncios obtenidos de la etiqueta publicitaria de cada pausa publicitaria. Las pausas publicitarias se indican en el manifiesto mediante marcadores de anuncio. El codificador de emisiones en directo inserta los marcadores de anuncios.

El anuncio se reproduce inmediatamente después de insertar la pausa publicitaria.

Limpieza

Ahora que has alojado correctamente una emisión en directo con la API Video Stitcher de Google Cloud y la has solicitado con el SDK de DAI de IMA para Roku, es importante que elimines los recursos de servicio.

Sigue la guía para limpiar las emisiones en directo para quitar los recursos y los activos que no necesites.