このガイドでは、Video Stitcher API でサポートされている広告マーカーについて説明します。Video Stitcher API は、ライブ配信のソース HLS/DASH マニフェストの広告マーカーによってミッドロール挿入点の境界を特定し、ライブ配信のすべてのセッションでミッドロール挿入点内の広告合成を実行します。
始める前に
Video Stitcher API の基本的なコンセプトと用語に精通していることを確認してください。詳細については、技術的な概要をご覧ください。
SCTE-35 仕様のデジタル プログラムの挿入キュー メッセージ(ケーブル用)をご覧ください。
SCTE-35 コマンド
ライブ配信の広告マーカーは、標準の SCTE-35 信号で表されます。SCTE-35 コマンドのリスト内では、Video Stitcher API は次の 2 つのコマンドをサポートしています。
splice_insert
time_signal
time_signal
を使用すると、最初のセグメンテーションの一意の番組 ID(UPID)で、関連するミッドロール挿入点に任意のメタデータを追加できます。
Video Stitcher API では、segmentation_upid_type
は 0x0C
である必要があります。これは MPU()
を表します。MPU()
の private_data
は、base64 でエンコードされた JSON 文字列にする必要があります。この文字列では、特定の JSON キーが次の特定の目的のために予約されています。
%%AD_TAG_ID%%
: ミッドロール挿入点に使用する広告タグを指定します。広告タグ ID は、ライブ セッションのadTagMacros
のキーの 1 つである必要があります。%%SLATE_ID%%
: ミッドロール挿入点に使用するスレートを指定します。スレート ID は、同じ Google Cloud プロジェクトですでに作成されているスレート ID と一致している必要があります。
UPID ペイロードの他のすべての Key-Value ペアは、広告タグのマクロ置換に使用されます。
たとえば、広告タグ URI が https://example.com?key=[foo]
で、private_data
が eyJmb28iOiJiYXIifQ==
({"foo":"bar"}
の Base64 表現)の場合、Video Stitcher API は [foo]
を bar
に置き換えて、https://example.com?key=bar
に広告タグ リクエストを送信します。
Google アド マネージャーの統合
Google アド マネージャーの統合ワークフローでは、SCTE35 メッセージに広告タグで置き換え可能な特定の値が含まれている場合があります。サポートされているマクロのリストをご覧ください。
ライブ構成に登録された adTagUri
に、選択したマクロが含まれていることを確認します。
たとえば、SCTE35 メッセージが %%SPLICE_INSERT_EVENT_ID%%
の値を渡す場合は、次の例に示すように、adTagUri
にマクロが存在することを確認します。
AD_TAG_URI¯o=%%SPLICE_INSERT_EVENT_ID%%
Video Stitcher API が広告メタデータをリクエストし、splice_insert
SCTE35 メッセージの splice_insert_event_id
が 123
に設定されている場合、次の広告タグが使用されます。
AD_TAG_URI¯o=123
HLS 広告マーカー
EXT-X-DATERANGE
#EXT-X-DATERANGE
の使用は、HTTP Live Streaming 仕様で指定されています。
SCTE35-OUT
属性を持つ#EXT-X-DATERANGE
タグは、ミッドロール挿入点の直後を指定します。- 属性
SCTE35-IN
を持つ#EXT-X-DATERANGE
タグは、ミッドロール挿入点の直後のスプリット ポイントを示します。 SCTE35-OUT
とSCTE35-IN
の値は 16 進数でエンコードされている必要があります。
例:
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,SCTE35-OUT=0xFC302000000000000000FFF00F050000006F7FFF7E002932E0000000000000235EE5EF
...
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,END-DATE=END_DATE,SCTE35-IN=0xFC302000000000000000FFF00F050000006F7F7F7E002932E0000000000000D56C4036
EXT-X-CUE-OUT と EXT-X-CUE-IN
#EXT-X-CUE-OUT
タグは広告ブレークの即時開始を示し、#EXT-X-CUE-IN
タグは広告ブレークの即時終了を示します。
#EXT-OATCLS-SCTE35
タグは SCTE-35 メッセージに使用できます。値は base64 エンコードされている必要があります。
例(SCTE-35 メッセージなし):
#EXT-X-CUE-OUT:DURATION=30
...
#EXT-X-CUE-IN
例(SCTE-35 メッセージあり):
#EXT-OATCLS-SCTE35:/DBBAAAAAAAAAP/wBQb+AAaXgAArAilDVUVJAAAAb3//AAApMuAMFXslJUFEX1RBR19JRCUlOnRhZy0xfTQAALOJefk=
#EXT-X-CUE-OUT:30
...
#EXT-X-CUE-IN
EXT-X-CUE-OUT
タグの長さが指定されている場合、SCTE-35 メッセージのミッドロール挿入点の長さがそれに矛盾していても、その値が優先されます。EXT-X-CUE-OUT
タグの長さが指定されておらず、関連する SCTE-35 メッセージで長さが指定されている場合、SCTE-35 メッセージの値が使用されます。
DASH 広告マーカー
現在、Video Stitcher API は複数期間の DASH マニフェストのみをサポートしています。マルチ期間の DASH マニフェストでは、広告ブレークは、キューアウト マーカーを含むイベント ストリームを持つ Period
で表す必要があります。ミッドロール挿入点の終了はミッドロール挿入点の終了を示すため、キューイン マーカーは必要ありません。
ミッドロール挿入点イベントがミッドロール挿入点期間の SCTE-35 イベント ストリームで複数提示されている場合、Video Stitcher API は最初のイベントのみを使用します。休憩の開始時間が期間の開始時間と同じであるため、キューアウト イベントの表示時間は無視されます。
SCTE-35 イベント ストリームでサポートされている schemeIdUri
のリストは次のとおりです。
urn:scte:scte35:2014:xml+bin
urn:scte:scte35:2013:xml
urn:scte:scte35:2014:xml+bin
schemeIdUri
が urn:scte:scte35:2014:xml+bin
に設定されているイベント ストリームには、base64 でエンコードされたバイナリ形式の SCTE-35 メッセージを表すイベントが含まれます。
例:
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">
<Event presentationTime="0" duration="5400000" id="1">
<Signal xmlns="urn:scte:scte35:2014:xml+bin">
<Binary xmlns="urn:scte:scte35:2014:xml+bin">/DBTAAAAAAAAAP/wBQb+AAaXgAA9AjtDVUVJAAAAAH//AABSZcAMJ3siJSVBRF9UQUdfSUQlJSI6InRhZy0xIiwiZGFzaCI6InRydWUifTQAABxkspA=</Binary>
</Signal>
</Event>
</EventStream>
...
</Period>
urn:scte:scte35:2013:xml
schemeIdUri
が urn:scte:scte35:2013:xml
に設定されているイベント ストリームには、SCTE-35 メッセージをクリアな XML で表すイベントが含まれています。
例:
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000">
<scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="140429" tier="4095">
<scte35:SpliceInsert spliceEventId="1" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
<scte35:Program><scte35:SpliceTime ptsTime="5672624400"/></scte35:Program>
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
ライブ配信の早期広告ブレーク通知
ライブ スティッチングの場合、Video Stitcher API がライブ配信のマニフェストでキューアウト広告マーカーを受信すると、広告タグが同期的に処理されます。この同期処理により、多数の広告タグ リクエストがトリガーされ、ストリームのエントリ数が非常に多い場合は、ライブ セッションの再生リクエストに長時間の遅延が発生します。
ミッドロール挿入点の早期通知(EABN)を使用すると、ミッドロール挿入点が近づいたことを API に通知することで、Video Stitcher API が広告の準備に十分な時間を確保できます。
HLS 早期広告ブレーク通知
API が広告を事前に準備できるように、ミッドロール挿入点の開始を API に通知するには、ライブ配信の HLS 再生リストに次の要件を満たす必要があります。
- 広告マーカーとして
#EXT-X-DATERANGE
またはEXT-X-CUE-OUT
を使用する - ライブ配信のソース マニフェストでキューアウト広告マーカーを繰り返す
#EXT-X-DATERANGE
ソース エンコーダが今後のミッドロール挿入点をスケジュールすると、ソース マニフェストに #EXT-X-DATERANGE
キューアウト マーカーを挿入できます。マーカーの X-TYPE
属性は、広告マーカーのタイプを示します。ミッドロール挿入点の早期通知の場合、X-TYPE
の値は EABN
になります。マーカーの START-TIME
属性は、ミッドロール挿入点の実際または予定の開始時間を示します。ミッドロール挿入点の DURATION
属性は、ミッドロール挿入点の長さを示すために必要です。このマーカーは EABN キューアウトと呼ばれます。
広告ブレークの実際の開始時に、ソース エンコーダはソース マニフェストに #EXT-X-DATERANGE
キューアウト マーカーを挿入する必要があります。マーカーの ID
属性は、対応する EABN キューアウトと同じにする必要があります。マーカーの START-TIME
は、このマーカーが挿入されるセグメントのメディア時間と同じである必要があります。このマーカーは、即時キューアウトと呼ばれます。
次のサンプル マニフェストには、1 つの EABN キューアウト、1 つの即時キューアウト、1 つのキューインが含まれています。
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-X-DATERANGE:ID="2415919105",X-TYPE="EABN",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-X-DATERANGE:ID="2415919105",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-DATERANGE:ID="2415919105",END-DATE="2020-11-08T21:11:48.976Z",SCTE35-IN=0xFC303...
#EXTINF:4.000,
1028/segment_239968.ts
#EXT-X-CUE-OUT
- 広告マーカーとして
#EXT-X-CUE-OUT
を使用する - ライブ配信のソース マニフェストでキューアウト広告マーカーを繰り返す
ソース エンコーダがミッドロール挿入点のスケジュールを設定すると、ソース マニフェストに #EXT-X-CUE-OUT
キューアウト マーカーを挿入することもできます。マーカーの X-TYPE
属性は、広告マーカーのタイプを示します。ミッドロール挿入点の早期通知の場合、X-TYPE
の値は EABN
になります。マーカーの DURATION
属性には、ミッドロール挿入点の長さを指定する必要があります。このマーカーは EABN キューアウトと呼ばれます。
広告ブレークの実際の開始時に、ソース エンコーダはソース マニフェストに #EXT-X-CUE-OUT
キューアウト マーカーを挿入する必要があります。マーカーの ID
属性は、対応する EABN キューアウトと同じにする必要があります。このマーカーは、即時キューアウトと呼ばれます。
次のサンプル マニフェストには、1 つの EABN キューアウト、1 つの即時キューアウト、1 つのキューインが含まれています。
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",X-TYPE="EABN",DURATION=29.988
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",DURATION=29.988
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-CUE-IN:ID="2415919105"
#EXTINF:4.000,
1028/segment_239968.ts
DASH 早期広告ブレーク通知
API が広告を事前に準備できるように、今後のミッドロール挿入点の開始を API に通知するには、DASH ライブ配信マニフェストで Main Period
と Ad Break Period
にミッドロール挿入点イベントを繰り返します。
Main Period
で最初に表示されるのは、次のミッドロール広告の開始を API に通知するもので、Ad Break Period
で 2 回目に表示されるのは、ミッドロール広告の即時開始を示すものです。
マニフェストの例を次に示します。
<MPD>
<Period id="1">
<!-- Main Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" presentationTime="53460000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT9M54S" id="2">
<!-- Ad Break Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT10M54S" id="3">
<!-- Main Period -->
...
</Period>
</MPD>
次のステップ
特定の Video Stitcher API タスクを完了する方法を学習する。