SGAI を使ってみる

サーバーガイド付きの広告挿入(SGAI)では、クライアント デバイスでステッチングする準備が整った連続配信広告マニフェストが提供されます。Google アド マネージャー ネットワークで Pod Serving DAI を有効にしている場合は、SGAI を使用できます。Pod Serving DAI が有効になっていない場合は、アカウント マネージャーにお問い合わせください。

SGAI では、Pod サービング API エンドポイントを使用して、広告メタデータと広告 Pod マニフェストを取得するストリームを作成します。

マニフェスト操作サーバーが用意されている場合は、任意の仕様に従って、広告連続配信マニフェスト URL を生成し、広告連続配信マニフェスト情報を含んだ広告マーカーをコンテンツ ストリームに挿入できます。

または、ストリーム マニフェストの広告マーカー以外のメカニズムを使用してミッドロール挿入点をスケジュールすることもできます。このような場合、アプリは、ストリーム、アプリ自体、プッシュ通知に対するユーザー操作など、他のイベントをリッスンできます。これらのイベントの後、アプリは広告連続配信マニフェストの URL を生成し、広告連続配信マニフェストの読み込みを開始するようプレーヤーに指示できます。

前提条件

続行する前に、次の準備をしてください。

推奨事項に沿って対応する

広告連続配信マニフェストの URL を生成する前に、Early Ad Break Notification(EABN)API を呼び出して、各ミッドロール挿入点の予想所要時間、ターゲティング情報、その他のパラメータを指定することをおすすめします。

本番環境とテスト環境のストリーミングでは、特に広告ネットワークにプログラマティック キャンペーンがある場合は、EABN API を呼び出します。詳しくは、プログラマティック直接取引の機能とガイドラインをご覧ください。

ストリーム登録リクエストを行う

ユーザーが動画プレーヤー アプリでコンテンツ ストリームを開始すると、ターゲティング パラメータを使用してストリーム登録リクエストを行い、アド マネージャーでストリーミング セッションを作成します。ストリーム登録リクエストの詳細については、Method:stream をご覧ください。その後、リクエストからレスポンス データが返されます。

次の例では、ストリーム登録リクエストを行います。

  • リクエスト:
authority: dai.google.com
method: POST
path: /ssai/pods/api/v1/network/51636543/custom_asset/hls-podserving-manifest/stream
scheme: https
content-type: application/x-www-form-urlencoded

cust_params=customID%253D1543216789%2526anotherKey%253Dvalue1%252Cvalue2
  • 対応:
{
    "manifest_format": "hls",
    "media_verification_url": "https://dai.google.com/view/p/service/linear/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/loc/TUL/network/51636543/event/TFyZF0IoSpqvCLtLv8JdCw/media/",
    "metadata_url": "https://dai.google.com/linear/pods/hls/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/metadata",
    "polling_frequency": 10,
    "session_update_url": "https://dai.google.com/linear/v1/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/session",
    "stream_id": "24fd4e7c-95a0-42be-8874-00625139b9db:TUL"
}
  • コマンドライン:
curl \
-H "Host: dai.google.com" \
-H "content-type: application/x-www-form-urlencoded" \
  --data-binary "cust_params=channelID%253D1543216789%2526anotherKey%253Dvalue1%252Cvalue2" \
  --compressed "https://dai.google.com/ssai/pods/api/v1/network/51636543/custom_asset/hls-podserving-manifest/stream"
  • 出力:
{
    "manifest_format": "hls",
    "media_verification_url": "https://dai.google.com/view/p/service/linear/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/loc/TUL/network/51636543/event/TFyZF0IoSpqvCLtLv8JdCw/media/",
    "metadata_url": "https://dai.google.com/linear/pods/hls/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/metadata",
    "pod_manifest_url": "https://dai.google.com/linear/pods/v1/hls/event/TFyZF0IoSpqvCLtLv8JdCw/pod/$pod-id$.m3u8?stream_id=24fd4e7c-95a0-42be-8874-00625139b9db%3ATUL",
    "polling_frequency": 10,
    "session_update_url": "https://dai.google.com/linear/v1/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/session",
    "stream_id": "24fd4e7c-95a0-42be-8874-00625139b9db:TUL"
}
  • Fetch API を使用する場合:
const response = await fetch("https://dai.google.com/ssai/pods/api/v1/network/51636543/custom_asset/hls-podserving-manifest/stream", {
  "headers": {
    "content-type": "application/x-www-form-urlencoded",
  },
  "body": "cust_params=channelID%3D1543216789%26anotherKey%3Dvalue1%2Cvalue2",
  "method": "POST",
});

  const stream = await response.json();
  console.log(stream);
  • コンソール ログ:
{
    "stream_id": "24fd4e7c-95a0-42be-8874-00625139b9db:TUL",
    "media_verification_url": "https://dai.google.com/view/p/service/linear/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/loc/TUL/network/51636543/event/TFyZF0IoSpqvCLtLv8JdCw/media/",
    "metadata_url": "https://dai.google.com/linear/pods/hls/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/metadata",
    "session_update_url": "https://dai.google.com/linear/v1/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/session",
    "polling_frequency": 10,
    "pod_manifest_url": "https://dai.google.com/linear/pods/v1/hls/event/TFyZF0IoSpqvCLtLv8JdCw/pod/$pod-id$.m3u8?stream_id=24fd4e7c-95a0-42be-8874-00625139b9db%3ATUL",
    "manifest_format": "hls"
}

ミッドロール挿入点のメタデータをポーリングする

ストリーム登録リクエストを送信したら、広告メタデータをポーリングします。ポーリングするには、登録手順でストリーム レスポンスの polling_frequence を使用してタイマーを設定し、広告のmetadataを呼び出します。アンケートごとに、メタデータを含む広告の部分的なリストが利用可能になり次第届きます。

広告連続配信のマニフェスト URL を生成する

Pod Serving API のPod リソースの URL を作成します。その後、URL を動画プレーヤーに渡して、連続配信広告の読み込みを開始します。

次の例は、広告連続配信のマニフェスト URL の構造を示しています。

https://dai.google.com/linear/pods/v1/hls/network/51636543/custom_asset/pod_serving_hls_manifest_mp4/ad_break_id/ab101.m3u8?stream_id=24fd4e7c-95a0-42be-8874-00625139b9db:TUL&pd=120000

広告連続配信マニフェストの URL パラメータは、動画プレーヤーまたはサーバー通知から取得したミッドロール挿入点情報に基づいて計算できます。これらのパラメータの要件については、方法: Pod マニフェストをご覧ください。

広告 Pod マニフェストを再生する

クライアントの動画プレーヤー アプリで、プライマリ動画プレーヤーを使用してコンテンツ ストリームの再生を開始し、再生と広告のスケジュールの確認について、動画プレーヤーのドキュメントに沿って対応します(該当する場合)。

広告連続配信マニフェストの URL を生成し、サーバーサイドのマニフェストに挿入する場合は、動画プレーヤーの今後のミッドロール挿入点イベントを監視し、各ミッドロール挿入点の再生中に id3 イベントを必ず定期購入してください。クライアント側からミッドロール挿入点イベントをスケジュールする場合は、作成時に id3 イベントをサブスクライブします。

インプレッションと広告イベントをレポートする

動画プレーヤーが広告連続配信を再生し、ID3 タイミング メタデータを検出すると、動画プレーヤーがトリガーする広告イベントをリッスンし、処理してメディアの検証 ping を送信します。