互動式媒體廣告 (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 入門指南。本指南的事件監聽器和串流啟動部分包含中繼資料處理迴圈。
串流格式和容器規定
如要在 Roku 上啟用用戶端廣告追蹤,您必須在以支援的容器格式封裝的動態廣告插播串流中,使用媒體片段。Roku OS 可透過這個程序擷取時間碼中繼資料。
Roku 媒體播放器支援從下列容器格式擷取頻內 ID3 中繼資料:
- MPEG-2 傳輸串流 (TS)
- 片段 MP4
- 通用媒體應用程式格式 (CMAF)
Roku OS 不支援原始基本音訊串流,例如原始進階音訊編碼 (AAC) 片段的定時中繼資料。Roku 媒體播放器無法從原始 AAC 音訊串流擷取 ID3 時間碼中繼資料,因此 IMA SDK 無法接收中繼資料事件,也無法傳送廣告曝光或追蹤信號。所有純音訊和音訊轉譯串流都必須使用支援容器格式封裝的串流,例如 TS、MP4 或 CMAF。
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,在串流要求中傳送影片物件。