處理線性 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 串流

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

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

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