VOD ストリーム用のクライアント動画プレーヤー アプリ

Google DAI Pod Serving API を使用すると、サーバーサイドの広告挿入、 動画の合成はご自身で管理できます。

このガイドでは、Pod Serving API を操作する方法と、 同様の機能を IMA DAI SDK と併用できます特定の Google Cloud サービスの Google アカウント マネージャーにお問い合わせください。

Pod Serving API は、HLS または MPEG-DASH 形式の連続配信ストリームに対応しています。 使用できます。このガイドでは、HLS ストリームに焦点を当て、 HLS と MPEG-DASH の違いを解説します。

Pod Serving API を VOD ストリーム用にアプリに統合するには、次の手順を完了します。 手順は次のとおりです。

アド マネージャーにストリーム登録をリクエストする

ストリーム登録エンドポイントに POST リクエストを送信します。さらに、 マニフェスト操作に送信するストリーム ID を含む JSON レスポンス Pod Serving API エンドポイントを接続します。

API エンドポイント

POST: /ondemand/pods/api/v1/network/{network_code}/stream_registration
Host: dai.google.com
Content-Type: application/json

パスパラメータ

{network_code} Google アド マネージャー 360 のネットワーク コード

JSON 本文パラメータ

targeting_parameters コンテンツ ソース ID(cmsid)、動画 ID(vid)、 広告のターゲット設定 パラメータ必須

レスポンス JSON

media_verification_url 再生トラッキング イベントを ping するためのベース URL。完全なメディア検証 URL は、このベース URL に広告イベント ID を付加して作成されます。
metadata_url 連続配信広告のメタデータをリクエストするための URL。
stream_id 現在のストリーム セッションを識別するために使用される文字列。
valid_for 現在のライブ配信セッションが期限切れになるまでの残り時間(単位) dhms(日、時間、分、秒)の形式になります。たとえば 2h0m0.000s は 2 時間を表します。
valid_until 現在のストリーム セッションの有効期限が切れる時刻(ISO 8601 形式) yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm の日時文字列 使用できます。

リクエストの例(cURL)

curl -X POST \
     -d '{"targeting_parameters":{"cmsid":"12345","vid":"sample-video"}}' \
     -H 'Content-Type: application/json' \
  https://dai.google.com/ondemand/pods/api/v1/network/21775744923/stream_registration

レスポンスの例

{
  "media_verification_url": "https://dai.google.com/.../media/",
  "metadata_url": "https://dai.google.com/.../metadata",
  "stream_id": "6e69425c-0ac5-43ef-b070-c5143ba68541:CHS",
  "valid_for": "8h0m0s",
  "valid_until": "2023-03-24T08:30:26.839717986-07:00"
}

エラーの場合、標準の HTTP エラーコードが返され、JSON レスポンスは返されない できます。

JSON レスポンスを解析し、関連する値を保存します。

マニフェスト マニピュレータからストリーム マニフェストをリクエストする

マニフェスト マニピュレータごとに、リクエスト形式とレスポンス形式が異なります。問い合わせ先 マニピュレータプロバイダに問い合わせて 具体的な要件を確認してくださいもし 独自のマニフェスト マニピュレータを実装する方法については、マニフェスト マニピュレータの ガイドを参照し、 適用できます。

通常は、システム コンポーネントによって返されたストリーム ID を 上記の登録エンドポイントをマニフェスト マニピュレータに追加して、 作成することもできます。マニフェストで明示されている場合を除きます。 マニフェスト リクエストに対するレスポンスは、 両方が必要です

リクエストの例(cURL)

curl https://{manifest_manipulator}/video/1331997/stream/6e69425c-0ac5-43ef-b070-c5143ba68541:CHS/vod_manifest.m3u8

レスポンスの例(HLS)

#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="abcd1234_     subitles-en.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.42e00a,mp4a.40.2"
abcd1234_video-1080p.m3u8

ストリームを再生

マニフェスト操作サーバーから受け取ったマニフェストを 開始して再生を開始します。

アド マネージャーから連続配信広告のメタデータをリクエストする

ステップ 1 で受け取った metadata_urlGET リクエストを送信します。この ステップは、マニフェストから合成されたマニフェストを受信した後に実行する必要があります 使用します。代わりに、次の内容を含む JSON オブジェクトを受け取ります。 parameters:

tags ページに表示されるすべての広告イベントを含む Key-Value ペアのセット 。キーは、広告イベントの最初の 17 文字または ストリームの時間指定メタデータに表示される ID、またはイベントの場合に返される ID タイプ progress(完全な広告イベント ID)。

各値は、次のパラメータを含むオブジェクトです。

ad ads オブジェクトのキーと一致する広告の ID。
ad_break_id ad_breaks のキーと一致するミッドロール挿入点の ID 渡されます。
type 広告イベントのタイプ。広告イベントタイプは次のとおりです。
start 広告の開始時に呼び出されます。
firstquartile 第 1 四分位の終了時に呼び出されます。
midpoint 広告のミッドポイントで呼び出されます。
thirdquartile 第 3 四分位の終了時に呼び出されます。
complete 広告の終了時に呼び出されます。
progress 広告中に定期的に配信され、広告が 再生中。
ads ストリーム内に表示されるすべての広告を表す一連の Key-Value ペア。「 キーは、tags オブジェクト内の値と一致する広告 ID です。 使用できます。各値は、次のパラメータを含むオブジェクトです。
ad_break_id ad_breaks のキーと一致するミッドロール挿入点の ID 渡されます。
position 広告内の広告セット内でこの広告が表示される位置 浮動小数点秒単位でブレークします
duration 広告の長さ(浮動小数点数秒単位)。
clickthrough_url ユーザーがこの広告を操作したときに開く URL(サポートされている場合)。
ad_breaks ストリーム内に表示されるすべてのミッドロール挿入点を表す Key-Value ペアのセット。 キーは、tags にある値と一致する広告ブレーク ID です。 および上記の ads オブジェクトを使用します。各値は 1 つのオブジェクトで 次のパラメータを含む:
type ミッドロール挿入点のタイプ。ミッドロール挿入点のタイプ: pre(プレロール)、 mid(ミッドロール)、post(ポストロール)があります。
duration 広告ブレークの長さ(浮動小数点数秒単位)。
ads このミッドロール挿入点内の広告の数。

これらの値を保存して、動画内の時間指定のメタデータ イベントに関連付けます。 。

リクエストの例(cURL)

curl https://dai.google.com/.../metadata

レスポンスの例

{
  "tags":{
    "google_5555555555":{
      "ad":"0000229834_ad1",
      "ad_break_id":"0000229834",
      "type":"firstquartile"
    },
    "google_1234567890123456789":{
      "ad":"0000229834_ad1",
      "ad_break_id":"0000229834",
      "type":"progress"
    },
    ...
  },
  "ads":{
    "0000229834_ad1":{
      "ad_break_id":"0000229834",
      "position":1,
      "duration":15,
      "clickthrough_url":"https://.../",
      ...
    },
          ...
  },
  "ad_breaks":{
    "0000229834":{
      "type":"mid",
      "duration":15,
      "ads":1
    },
    ...
  }
}

広告イベントをリッスンする

音声/動画ストリームでトリガーされた広告イベントを通じて、時間指定のメタデータをリッスンする 追加できます

MPEG-TS ストリームの場合、メタデータは帯域内 ID3 v2.3 タグとして表示されます。各 メタデータタグの ID は TXXX で、値は文字列 google_ で始まります。 その後に文字が続きます。この値は広告イベント ID です。

TXXXXXX はプレースホルダではありません。文字列 TXXX は、ID3 タグ ID です。 使用します。

ID3 タグの例

TXXXgoogle_1234567890123456789

MP4 ストリームの場合、これらは ID3 v2.3 をエミュレートするインバンド emsg イベントとして送信されます。 できます。関連する各 emsg ボックスの scheme_id_uri 値は次のいずれかです。 https://aomedia.org/emsg/ID3 または https://developer.apple.com/streaming/emsg-id3message_data 値 先頭が ID3TXXXgoogle_ になります。この message_data 値。 ID3TXXX 接頭辞は、広告イベント ID です。

emsg ボックスの例

データ構造は、メディア プレーヤーのライブラリによって異なる場合があります。

広告イベント ID が google_1234567890123456789 の場合、レスポンスは次のようになります。 これを次のように使用します。

{
  "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3",
  "presentation_time": 27554,
  "timescale": 1000,
  "message_data": "ID3TXXXgoogle_1234567890123456789",
  ...
}

一部のメディア プレーヤー ライブラリは、ID3 をエミュレートする emsg イベントを自動的に提示する ネイティブ ID3 タグとして使用しますこの場合、MP4 ストリームは同一の ID3 タグを持ちます。 MPEG_TS です。

クライアント動画プレーヤー アプリの UI を更新する

各広告イベント ID は、ステップ 4 の tags オブジェクトのキーと一致する可能性があります。 これらの値の照合は、次の 2 段階のプロセスで行われます。

  1. tags オブジェクトで、完全な広告イベント ID に一致するキーを確認します。条件 一致が見つかった場合は、イベントタイプとそれに関連付けられた ad を取得します。 ad_break オブジェクト。これらのイベントのタイプは progress にする必要があります。

    完全な広告イベント ID に一致するものが見つからない場合は、tags を確認してください 広告イベント ID の最初の 17 文字に一致するキーのオブジェクトです。 イベントタイプと、関連する ad オブジェクトと ad_break オブジェクトを取得します。 これにより、progress 以外のタイプのイベントがすべて取得されます。

  2. この取得した情報を使用して、プレーヤーの UI を更新します。たとえば start または最初の progress イベントを受け取った場合、プレーヤーのシークを非表示にします 現在の広告の位置を示すオーバーレイを ミッドロール挿入点(「広告 1/3」など)。

広告イベント ID の例

google_1234567890123456789 // Progress event ID
google_5555555555123456789 // First Quartile event ID

タグ オブジェクトの例

{
  "google_5555555555":{
    "ad":"0000229834_ad1",
    "ad_break_id":"0000229834",
    "type":"firstquartile"
  },
  "google_1234567890123456789":{
    "ad":"0000229834_ad1",
    "ad_break_id":"0000229834",
    "type":"progress"
  },
  ...
}

メディアの確認 ping を送信する

メディアの確認 ping は、広告イベントが発生するたびにアド マネージャーに送信する必要がある progress 以外のタイプのデータを受信した場合。

広告イベントの完全なメディア確認用 URL を生成するには、 広告イベント ID をストリーム登録の media_verification_url 値に設定 レスポンスが返されます。

完全な URL で GET リクエストを行う。オーナー確認のリクエストが 成功すると、ステータス コード 202 の HTTP レスポンスが返されます。 それ以外の場合は、HTTP エラーコード 404 が返されます。

リクエストの例(cURL)

curl https://{...}/media/google_5555555555123456789

正常なレスポンスの例

HTTP/1.1 202 Accepted

参考情報