このガイドでは、連続配信広告タイミングメタデータ(ATM)メソッドを使用して広告ブレークを挿入し、プレロール広告を含む広告ブレークの正確なタイミングと期間を取得する方法について説明します。
プレロール広告を挿入し、ミッドロール広告ブレーク後にコンテンツに戻る処理を管理するには、次の API を呼び出すことをおすすめします。
- Ad pod Timing Metadata(ATM) API: 広告やスレートの期間など、連続配信広告の決定結果を照会します。
- 広告セグメント エンドポイント: 広告またはスレートのセグメントをリクエストします。現在の連続配信広告を終了することもできます。
必要に応じて、同時実行数の多いライブ配信イベントの場合は、Early Ad Break Notification(EABN) API を呼び出して、ミッドロール挿入点が始まる前に広告の決定をスケジュールすることをおすすめします。
前提条件
まず、連続配信広告の配信リダイレクト タイプのダイナミック広告挿入(DAI)用にライブ配信イベントを設定する必要があります。次のいずれかを行います。
- アド マネージャーの管理画面: DAI のライブ配信を設定します。
- Ad Manager API: クライアント ライブラリ(利用可能な
オプション)を使用して
LiveStreamEventService.createLiveStreamEventsメソッドを呼び出します。LiveStreamEvent.dynamicAdInsertionTypeパラメータをPOD_SERVING_REDIRECTに設定します。
コンテンツ ストリームを取得する
ユーザーがライブ配信イベントを選択すると、クライアント アプリは 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 を保存します。
連続配信広告のタイミング メタデータを取得する
連続配信広告のタイミングを取得する手順は次のとおりです。
- HMAC トークンを生成します。
- 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"
ミッドロール広告のタイミング メタデータをリクエストする
ミッドロールの連続配信広告のメタデータを取得する手順は次のとおりです。
- ライブ配信マニフェストを解析して、各ミッドロール挿入点のタイミングと期間を含む広告マーカーを見つけます。
- 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:17.450
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXTINF:2.450,
contentorigin.com/6.ts
#EXT-X-CUE-IN
#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/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 をマニフェストに組み立てます。広告セグメントでは 0 から始まるインデックスが使用されます。
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.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
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.000,
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.000,
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
#EXTINF:2.450,
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/3.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
スレート セグメントを作成する
広告とコンテンツの間のギャップを埋めるには、スレート セグメントを挿入します。
ATM API の JSON
レスポンスの slates.segment_durations.values 配列を使用して、各スレート
セグメントの期間を決定します。必要に応じてセグメント期間のシーケンスをループして、ミッドロール挿入点全体を埋めます。
EXT-X-CUE-IN タグを検出した場合など、連続配信広告が完了する前にコンテンツに戻るには、最後のスレート セグメントの URL に d=
パラメータを追加します。このパラメータは、クライアント動画プレーヤーのタイムラインに影響しないようにセグメントを短縮します。d=
パラメータの値は整数で、セグメントを短縮する期間をミリ秒単位で表す必要があります。
次の例では、スレート セグメントを組み立てます。
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 に保つかを決定します。
コンテンツに戻る処理を管理する
マニフェスト マニピュレータが連続配信広告のすべてのセグメントを挿入したら、コンテンツ ストリームに戻る必要があります。コンテンツ ストリームに戻るには、次のいずれかの方法を選択します。各方法では、ストリームのタイムラインを正確に保つために、最終的な再調整セグメントが必要です。
埋めて再調整する: スレート セグメントを挿入して、スレートをループします。
期間を埋めて、各スレート
の反復の間に要素EXT-X-DISCONTINUITYを挿入します。最後のセグメントでは、コンテンツの開始に合わせて d= パラメータをミリ秒単位で追加します。
すぐに戻る:
`d=` パラメータを使用して、単一の再調整スレート セグメントを挿入し、その後にコンテンツを続けます。d=
動画プレーヤーは、タイムラインを変更せずにコンテンツに戻ります。
次の例では、ミッドロール挿入点の残りの期間をスレート セグメントで埋めてトランジションを作成します。
#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-DISCONTINUITY
#EXTINF:5.000,
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.000,
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.000,
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
#EXT-X-DISCONTINUITY
#EXTINF:2.450,
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/1.ts?stream_id=SESSION_ID&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
この方法では、マニフェスト マニピュレータは必要に応じてスレートをループし、最後のスレート セグメントにのみ d= URL
パラメータを追加します。このプロセスは、ベース コンテンツのスケジュールされた開始時刻と正確に一致します。
次の例では、d= パラメータを使用して単一のスレート
セグメントを使用し、残りのブレーク全体をループされたスレートで埋めない場合に、プレーヤーのタイムラインを正確に保つ方法を示します。
#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-DISCONTINUITY
#EXTINF:5.000,
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.000,
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.000,
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:2.450,
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&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
省略可: ミッドロール挿入点をスケジュールする
広告掲載率を高めるには、連続配信広告の期間、カスタム ターゲティング パラメータ、SCTE-35 信号データを含む Early Ad Break Notification(EABN)を送信します。詳しくは、早期ミッドロール挿入点通知を送信するをご覧ください。