Processar metadados cronometrados em streams da DAI linear

Selecionar plataforma: HTML5 Roku

O SDK de inserção de anúncios dinâmicos (DAI, na sigla em inglês) do Interactive Media Ads (IMA) depende das informações de metadados incorporadas nos segmentos de mídia da transmissão (metadados na banda) ou no arquivo de manifesto de streaming (metadados no manifesto) para rastrear as posições dos espectadores e os eventos de anúncios do lado do cliente. Os metadados estão disponíveis na transmissão de DAI em diferentes formatos, dependendo do tipo de transmissão que está sendo reproduzida. O SDK de DAI do IMA processa todos os formatos de metadados usando uma única API.

Seu app é responsável por capturar metadados e encaminhá-los ao SDK de DAI do IMA. O SDK oferece o StreamManager.onMessage() método para transmitir essas informações. Esse método encaminha metadados na forma de um objeto msg fornecido pela porta roVideo. Esses objetos são processados pelo SDK de DAI do IMA para estabelecer o tempo dos eventos de anúncios. Ele usa um único argumento:

  • msg: um objeto do tipo msg fornecido pela porta roVideo.

Exemplo de código de metadados

Confira um exemplo de como processar os metadados da porta roVideo e transmiti-los ao SDK de DAI do IMA usando 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 mais informações sobre como incorporar os metadados de transmissão de processamento de loop ao seu app, consulte o guia de introdução do IMA Roku. A seção de listener de eventos e início da transmissão do guia contém o loop de processamento de metadados.

Requisitos de formato e contêiner de transmissão

Para ativar o rastreamento de anúncios do lado do cliente no Roku, use segmentos de mídia na transmissão de DAI empacotados em um formato de contêiner compatível. Esse processo permite que o SO Roku extraia metadados temporizados.

O Roku player de mídia oferece suporte à extração de metadados ID3 na banda nos seguintes formatos de contêiner:

  • Stream de transporte MPEG-2 (TS)
  • MP4 fragmentado
  • Formato de aplicativo de mídia comum (CMAF, na sigla em inglês)

Streams de áudio elementares brutos, como segmentos brutos de codificação de áudio avançada (AAC, na sigla em inglês), não são compatíveis com metadados temporizados no SO Roku. O Roku player de mídia não pode extrair metadados temporizados ID3 de streams de áudio AAC brutos, o que impede que o SDK do IMA receba eventos de metadados e envie beacons de impressão de anúncios ou de rastreamento. Para todos os streams somente de áudio e de renderização de áudio, use streams com empacotamento de formato de contêiner compatível, como TS, MP4 ou CMAF.

Streams CMAF HLS

Os streams HLS de DAI linear que usam o Common Media Application Framework (CMAF) transmitem metadados temporizados por caixas eMSGv1 na banda seguindo o padrão ID3 por CMAF. Essas caixas eMSG são incorporadas no início de cada segmento de mídia, com cada eMSG ID3 contendo um PTS relativo à última descontinuidade no stream.

Para o IMA Roku, todos os streams CMAF HLS enviam dados ID3 na banda usando o formato eMSGv0. O IMA combina as informações fornecidas pelo formato eMSGv0 com as informações do objeto de vídeo.

Para ativar a análise adequada de eventos ID3 de stream CMAF HLS, envie seu objeto de vídeo na solicitação de stream usando StreamRequest.videoObject.