Interactive Media Ads(IMA)動的広告挿入(DAI)SDK は、視聴者の位置とクライアントサイドの広告イベントをトラッキングするために、ストリームのメディア セグメントに埋め込まれたメタデータ情報(インバンド メタデータ)またはストリーミング マニフェスト ファイルに埋め込まれたメタデータ情報(インマニフェスト メタデータ)に依存しています。メタデータは、再生されるストリームの種類に応じて、さまざまな形式で DAI ストリームから取得できます。IMA DAI SDK は、単一の API を介してすべてのメタデータ形式を処理します。
メタデータをキャプチャして IMA DAI SDK に転送する処理は、アプリ側で行う必要があります。SDK には、この情報を渡すための
StreamManager.onMessage()
メソッドが用意されています。このメソッドは、roVideo ポートから提供される msg オブジェクトの形式でメタデータを転送します。これらのオブジェクトは IMA DAI SDK によって処理され、広告イベントのタイミングが確立されます。このメソッドは 1 つの引数を受け取ります。
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 ストリーム
Common Media Application Framework(CMAF)を使用するリニア DAI HLS ストリームは、 ID3 through CMAF 標準に従って、インバンド eMSGv1 ボックスを介してタイムド メタデータを渡します。これらの eMSG ボックスは各メディア セグメントの先頭に埋め込まれ、各 ID3 eMSG にはストリームの最後の不連続点からの相対的な PTS が含まれています。
IMA Roku の場合、すべての HLS CMAF ストリームは eMSGv0 形式を使用してインバンド ID3 データを送信します。 IMA は、eMSGv0 形式で提供される情報と動画オブジェクトからの情報を組み合わせます。
HLS CMAF ストリーム ID3 イベントを適切に解析するには、
動画オブジェクトをストリーム リクエストで
StreamRequest.videoObjectを使用して送信する必要があります。