Cómo controlar metadatos temporizados en transmisiones de DAI lineales

El SDK de inserción de anuncios dinámicos (DAI) de anuncios multimedia interactivos (IMA) se basa en la información de metadatos incorporada en los segmentos multimedia de la transmisión (metadatos en banda) o en el archivo de manifiesto de transmisión (metadatos en el manifiesto) para realizar un seguimiento de las posiciones de los espectadores y los eventos de anuncios del cliente. Los metadatos están disponibles en la transmisión de DAI en diferentes formatos, según el tipo de transmisión que se reproduzca. El SDK de IMA de Roku controla todos los formatos de metadatos a través de una sola API.

Tu app es responsable de capturar metadatos y reenviarlos al SDK de DAI de IMA. El SDK ofrece el método StreamManager.onMessage() para pasar esta información. Este método reenvía metadatos en forma de un objeto msg que proporciona el puerto roVideo. Luego, el SDK de DAI de IMA procesa estos objetos para establecer el tiempo de los eventos de anuncios. Se necesita un solo argumento:

  • msg: Es un objeto de tipo de mensaje que proporciona el puerto roVideo.

Código de muestra de metadatos

A continuación, se muestra un ejemplo de cómo controlar los metadatos del puerto roVideo y pasarlos al SDK de IMA mediante StreamManager.onMessage().

Sub runLoop()
  ' Forward all timed metadata events to IMA.
  m.top.video.timedMetaDataSelectionKeys = ["*"]

  ' Cycle through all the fields and set listeners.
  ' IMPORTANT: Failure to listen to the position and timedmetadata fields could
  ' result in ad impressions not being reported.
  m.port = CreateObject("roMessagePort")
  fields = m.top.video.getFields()
  for each field in fields
    m.top.video.observeField(field, m.port)
  end for

  while True
    msg = wait(1000, m.port)
    if m.top.video = invalid
      print "exiting"
      exit while
    end if

    m.streamManager.onMessage(msg)
    currentTime = m.top.video.position
    If currentTime > 3 And not m.top.adPlaying
       m.top.video.enableTrickPlay = true
    End If
  end while
End Sub

A fin de obtener más información para incorporar los metadatos de transmisión de control de bucles en tu app, consulta la guía de introducción de IMA Roku. La sección de inicio de transmisión y objeto de escucha de eventos de la guía contiene el bucle de control de metadatos.

Transmisiones HLS CMAF

Las transmisiones HLS de DAI lineales que usan el Common Media Application Framework (CMAF) pasan metadatos temporizados a través de cuadros eMSGv1 dentro de la banda después del estándar ID3 a CMAF. Estos cuadros eMSG están incorporados al comienzo de cada segmento de medios, y cada eMSG ID3 contiene un PTS relacionado con la última discontinuidad de la transmisión.

En el caso de IMA Roku, todas las transmisiones HLS CMAF envían datos ID3 dentro de banda con el formato eMSGv0. IMA combina la información proporcionada por el formato eMSGv0 con la información del objeto de video.

Para habilitar el análisis adecuado de los eventos ID3 de transmisión HLS CMAF, debes enviar tu objeto de video en la solicitud de transmisión mediante StreamRequest.videoObject.