リニア DAI ストリームで時間指定メタデータを処理する

Interactive Media Ads(IMA)Dynamic Ad Insertion SDK(DAI)は、 ストリームのメディア セグメントに埋め込まれたメタデータ情報(インバンド メタデータ) ストリーミング マニフェスト ファイル(マニフェスト内のメタデータ)で閲覧者のアクションを追跡することで、 クライアントサイドの広告イベントを測定しています。メタデータは、再生されるストリームの種類に応じて、さまざまな形式で DAI ストリームから取得できます。IMA DAI SDK は 1 つの 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 ~ CMAF 標準。これらの eMSG ボックスは 各メディア セグメントの先頭に埋め込まれます。各 ID3 eMSG には、 ストリームの最後の中断を基準とする PTS。

IMA Roku では、すべての HLS CMAF ストリームが eMSGv0 形式を使用してインバンド ID3 データを送信します。 IMA は、eMSGv0 形式で提供される情報と情報を結合します。 動画オブジェクトから取得します。

HLS CMAF ストリーム ID3 イベントを適切に解析できるようにするには、 を使用してストリーム リクエストの動画オブジェクトを作成し、 StreamRequest.videoObject