處理線性 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 入門指南。本指南的事件監聽器和串流啟動部分包含中繼資料處理迴圈。

HTTP 即時串流 CMAF 串流

使用通用媒體應用程式架構 (CMAF) 的線性 DAI HLS 串流,會透過頻內 eMSGv1 方塊傳遞時間碼中繼資料,並遵循「透過 CMAF 的 ID3」標準。這些 eMSG 方塊會嵌入每個媒體片段的開頭,每個 ID3 eMSG 都包含相對於串流中最後一個不連續點的 PTS。

對於 IMA Roku,所有 HLS CMAF 串流都會使用 eMSGv0 格式傳送頻內 ID3 資料。 IMA 會結合 eMSGv0 格式提供的資訊和影片物件的資訊。

如要正確剖析 HTTP 即時串流 CMAF 串流 ID3 事件,請務必使用 StreamRequest.videoObject,在串流要求中傳送影片物件。