处理线性 DAI 视频流中的定时元数据

选择平台HTML5 Roku

互动媒体广告 (IMA) 动态广告插播 SDK (DAI) 依赖于嵌入在流的媒体片段(带内元数据)或流式传输清单文件(清单内元数据)中的元数据信息来跟踪观看者的位置和客户端广告事件。根据播放的流的类型,DAI 流中的元数据采用不同的格式。IMA DAI SDK 通过单个 API 处理所有元数据格式。

您的应用负责捕获元数据并将其转发给 IMA DAI SDK。该 SDK 提供 StreamManager.onMessage() 方法来传递此信息。此方法以 roVideo 端口提供的 msg 对象的形式转发元数据。然后,IMA DAI SDK 会处理这些对象,以确定广告事件的时间。它接受一个实参:

  • msg:roVideo 端口提供的 msg 类型对象。

元数据示例代码

以下示例展示了如何处理来自 roVideo 端口的元数据,并通过 StreamManager.onMessage() 将其传递给 IMA DAI SDK。

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

如需详细了解如何将循环处理流元数据 纳入您的应用,请参阅 IMA Roku 入门指南。该指南的 事件监听器和流开始部分 包含元数据处理循环。

HLS CMAF 流

使用通用媒体应用框架 (CMAF) 的线性 DAI HLS 流传递 定时元数据通过带内 eMSGv1 框,遵循 ID3 到 CMAF 标准。这些 eMSG 框嵌入在每个媒体片段的开头,每个 ID3 eMSG 都包含相对于流中上次中断的 PTS。

对于 IMA Roku,所有 HLS CMAF 流都使用 eMSGv0 格式发送带内 ID3 数据。 IMA 将 eMSGv0 格式提供的信息与视频对象中的信息相结合。

如需正确解析 HLS CMAF 流 ID3 事件,您必须使用 StreamRequest.videoObject在流请求中发送您的 视频对象。