広告ポッドのタイミング メタデータを含む広告を挿入する

このガイドでは、連続配信広告タイミング メタデータ(ATM)メソッドを使用してミッドロール挿入点を挿入し、プレロール広告を含むミッドロール挿入点の正確なタイミングと再生時間を取得する方法について説明します。

プレロール広告を挿入し、ミッドロール広告ブレーク後にコンテンツに戻る処理を管理するには、次の API を呼び出すことをおすすめします。

オプションとして、同時実行数の多いライブ配信イベントでは、Early Ad Break Notification(EABN)API を呼び出して、ミッドロール挿入点の開始前に広告判定をスケジュールすることをおすすめします。

前提条件

まず、Pod Serving リダイレクトのダイナミック広告挿入(DAI)タイプでライブ配信イベントを設定する必要があります。次のいずれかを行います。

コンテンツ ストリームを取得する

ユーザーがライブ配信イベントを選択すると、クライアント アプリは Google アド マネージャーにストリーム リクエストを行います。ストリーム レスポンスで、アプリは Google DAI セッション ID とメタデータを抽出し、ストリーム マニフェスト リクエストに含めます。

次の例では、Google DAI セッション ID をマニフェスト マニピュレータに渡しています。

https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY

動画コンテンツの再生リクエストを処理する際に、リクエストから Google DAI セッション ID と CUSTOM_ASSET_KEY を保存して、広告のステッチに備えます。

連続配信広告のタイミング メタデータを取得する

連続配信広告のタイミングを取得する手順は次のとおりです。

  1. HMAC トークンを生成する
  2. HMAC トークンを使用して ATM API を呼び出します。

プレロール広告のリクエスト タイミング メタデータ

次のオプションを使用して、ライブ配信イベントのプリロール設定を確認します。

プレロール広告の決定結果を取得するには、ATM API にリクエストを送信します。

次の例では、プレロール広告の ATM リクエストを行っています。

curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=preroll&auth-token=your_signed_HMAC_token"

ミッドロール広告のタイミング メタデータをリクエストする

ミッドロールの連続配信広告のメタデータを取得する手順は次のとおりです。

  1. ライブ配信のマニフェストを解析して、各ミッドロール挿入点のタイミングと長さを含む広告マーカーを見つけます。
  2. ATM API エンドポイントを呼び出して、正確な連続配信広告とスレートの再生時間をリクエストします。API は、広告ポッドの決定結果を含む JSON オブジェクトを返します。

次の例では、ミッドロール広告の ATM リクエストを行っています。

curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=AD_BREAK_ID&pd=AD_BREAK_DURATION&auth-token=your_signed_HMAC_token"

成功すると、次のような JSON オブジェクトが出力されます。

{
  "status": "final",
  "ads": [
    {
      "duration_ms": 5046,
      "variants": {
        "devrel1428000": {
          "segment_extension": "ts",
          "segment_durations": {
            "timescale": 1000,
            "values": [
              5045
            ]
          }
        },
        "devrel1928000": {
          "segment_extension": "ts",
          "segment_durations": {
            "timescale": 1000,
            "values": [
              5045
            ]
          }
        }
      }
    }
  ],
  "slate": {
    "duration_ms": 0,
    "variants": {
      "devrel1428000": {
        "segment_extension": "ts",
        "segment_durations": {
          "timescale": 1000,
          "values": [
            5005,
            ...
            5046
          ]
        }
      },
      "devrel1928000": {
        "segment_extension": "ts",
        "segment_durations": {
          "timescale": 1000,
          "values": [
            5005,
            ...
            5046
          ]
        }
      }
    }
  }
}

広告をコンテンツ マニフェストにステッチする

以降のセクションでは、ライブ配信マニフェストを変更して広告セグメントを追加する方法について説明します。

ミッドロール挿入点のセグメントを特定して不連続点を挿入する

各バリアント マニフェストを処理する際に、ストリーム内の EXT-X-CUE-IN タグと EXT-X-CUE-OUT タグを特定します。これらのタグは、広告ブレークの開始と終了を示します。

クライアント動画プレーヤーでコンテンツと広告を切り替えるために、EXT-X-CUE-IN タグと EXT-X-CUE-OUT タグを EXT-X-DISCONTINUITY 要素に置き換えます。

次のマニフェストの例では、EXT-X-CUE-IN タグと EXT-X-CUE-OUT タグを置き換えています。

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/6.ts
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

次の例は、置き換えられたマニフェストを示しています。

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXTINF:5.000,
#EXT-X-DISCONTINUITY
{... Insert ad segments here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/6.mp4
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

Google DAI 広告セグメントは暗号化されません。コンテンツが暗号化されている場合は、各ミッドロール挿入点の最初の広告セグメントの前に EXT-X-KEY:METHOD=NONE 要素を挿入して、暗号化を解除します。ミッドロール挿入点の終了時に、適切な EXT-X-KEY を挿入して暗号化を元に戻します。

次のミッドロール挿入点の開始時間、再生時間、インデックスを追跡します。

広告セグメントの URL を作成する

EXT-X-DISCONTINUITY タグの間のコンテンツ セグメントを、各広告セグメントの URL に置き換えます。挿入する広告セグメントの数を判断するには、ATM API からの JSON レスポンスで提供される ads.segment_durations.values を使用します。

EXT-X-CUE-IN タグが検出されたときに連続配信広告を早期に終了するには、最終広告セグメントの URL に d= パラメータを追加します。このパラメータは、クライアントの動画プレーヤーのタイムラインに影響を与えないようにセグメントを短縮します。

次の例では、プリロール広告セグメントの URL をマニフェストに組み立てています。広告セグメントはゼロから始まるインデックスを使用します。

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/preroll/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

次の例では、ミッドロール広告セグメントの URL をマニフェストに組み立てています。

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

次の例では、マニフェストに広告セグメントを挿入します。

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.00,
contentorigin.com/1.ts
#EXTINF:5.00,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
contentorigin.com/6.mp4
#EXTINF:5.00,
contentorigin.com/7.mp4
#EXTINF:5.00,
contentorigin.com/8.mp4

スレート セグメントを作成する

広告とコンテンツの間のギャップを埋めるには、スレート セグメントを挿入します。ATM API の JSON レスポンスの slates.segment_durations.values 配列を使用して、各スレート セグメントの長さを決定します。必要に応じてセグメントの再生時間をループして、ミッドロール挿入点全体を埋めます。

次の例では、スレート セグメントを組み立てています。

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

例の slate/0 は、スレートのイテレーション番号を表します。クライアント動画プレーヤーの互換性とキャッシュ保存機能を参照して、0 から開始し、スレートのループごとにこの数値を増やすか、すべてのイテレーションで 0 のままにするかを判断します。

コンテンツへの戻りを管理する

連続配信広告からすべてのセグメントを挿入したら、次のいずれかの方法でコンテンツ ストリームに戻ります。

メソッド 説明 クライアントの動画プレーヤーへの影響
Fill with slate segments スレート セグメントを挿入し、スレートをループします。期間を埋め、各スレートのイテレーションの間に EXT-X-DISCONTINUITY 要素を挿入します。 効果なし。
動画プレーヤーは、タイムラインを変更せずにコンテンツに戻ります。
単一の Slate セグメントで再調整する 単一のスレート セグメントを挿入します。d= パラメータを使用して、コンテンツの開始までの時間を入力します。 効果なし。
動画プレーヤーは、タイムラインを変更せずにコンテンツに戻ります。
Immediate Return(即時返品) コンテンツ セグメントを挿入します。 動画プレーヤーのタイムラインが変更されます。
クライアントの動画プレーヤーは、変更されたタイムラインを処理する必要があります。

省略可: ミッドロール挿入点をスケジュール設定する

広告掲載率を高めるには、連続配信広告の長さ、カスタム ターゲティング パラメータ、SCTE-35 信号データを含む Early Ad Break Notification(EABN)を送信します。詳しくは、ミッドロール挿入点の早期通知を送信するをご覧ください。