El SDK de Interactive Media Ads (IMA) Dynamic Ad Insertion (DAI) se basa en la información de metadatos incorporada en los segmentos de medios de la transmisión (metadatos en banda) o en el archivo de manifiesto de transmisión (metadatos en el manifiesto) para hacer un seguimiento de las posiciones de los usuarios 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 DAI controla todos los formatos de metadatos a través de una sola API.
Tu app es responsable de capturar los metadatos y reenviarlos al SDK de IMA DAI. El SDK ofrece el
StreamManager.onMessage()
método para pasar esta información. Este método reenvía los metadatos en forma de un objeto msg proporcionado por el puerto roVideo. Luego, el SDK de IMA DAI procesa estos objetos para establecer el tiempo de los eventos de anuncios. Toma un solo argumento:
msg: Un objeto de tipo msg proporcionado por 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 DAI a través de 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
Para obtener más información sobre cómo incorporar los metadatos de la transmisión de control de bucle en tu app, consulta la guía de introducción a IMA Roku. La sección del objeto de escucha de eventos y el inicio de la transmisión de la guía contiene el bucle de control de metadatos.
Requisitos de formato y contenedor de transmisión
Para habilitar el seguimiento de anuncios del cliente en Roku, debes usar segmentos de medios en tu transmisión de DAI empaquetados en un formato de contenedor compatible. Este proceso permite que el SO de Roku extraiga metadatos temporizados.
El reproductor multimedia de Roku admite la extracción de metadatos ID3 en banda en los siguientes formatos de contenedor:
- MPEG-2 Transport Stream (TS)
- MP4 fragmentado
- Common Media Application Format (CMAF)
Las transmisiones de audio elementales sin procesar, como los segmentos de codificación de audio avanzada (AAC) sin procesar, no son compatibles con los metadatos temporizados en el SO de Roku. El reproductor multimedia de Roku no puede extraer metadatos temporizados ID3 de transmisiones de audio AAC sin procesar, lo que impide que el SDK de IMA reciba eventos de metadatos y envíe impresiones de anuncios o balizas de seguimiento. Para todas las transmisiones solo de audio y de reproducción de audio, debes usar transmisiones con empaquetado de formato de contenedor compatible, como TS, MP4 o CMAF.
Transmisiones CMAF de HLS
Las transmisiones de DAI lineales de HLS que usan el marco de trabajo de Common Media Application Framework (CMAF) pasan metadatos temporizados a través de cuadros eMSGv1 en banda que siguen el estándar ID3 a través de CMAF. Estos cuadros eMSG se incorporan al comienzo de cada segmento de medios, y cada eMSG ID3 contiene un PTS en relación con la última discontinuidad en la transmisión.
En el caso de IMA Roku, todas las transmisiones CMAF de HLS envían datos ID3 en 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 la transmisión CMAF de HLS, debes enviar tu
objeto de video en la solicitud de transmisión con
StreamRequest.videoObject.