本指南說明 Video Stitcher API 支援的廣告標記。Video Stitcher API 會根據直播活動來源 HLS/DASH 資訊清單中的廣告標記,找出廣告插播的邊界,並在每個直播工作階段的廣告插播中執行廣告接合作業。
事前準備
請務必熟悉 Video Stitcher API 中的入門概念和術語。詳情請參閱技術總覽。
請參閱 SCTE-35 規格「Digital Program Insertion Cueing Message For Cable」。
SCTE-35 指令
直播廣告標記會以標準 SCTE-35 信號表示。在 SCTE-35 指令清單中,Video Stitcher API 支援下列兩個指令:
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
中的其中一個鍵。%%SLATE_ID%%
:指定要用於廣告插播的標題。該資訊卡 ID 必須與同一個 Google Cloud 專案中已建立的資訊卡 ID 相符。
UPID 酬載中的所有其他鍵/值組合,都會用於廣告代碼巨集取代。
舉例來說,如果廣告代碼 URI 為 https://example.com?key=[foo]
,而 private_data
為 eyJmb28iOiJiYXIifQ==
(即 {"foo":"bar"}
的 base64 表示法),則 Video Stitcher API 會將 [foo]
替換為 bar
,並向 https://example.com?key=bar
提出廣告代碼要求。
Google Ad Manager 整合
就 Google Ad Manager 整合工作流程而言,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
HTTP 即時串流規格中已指定使用 #EXT-X-DATERANGE
:
- 含有
SCTE35-OUT
屬性的#EXT-X-DATERANGE
標記,可指出廣告插播的立即開始拼接點。 - 含有
SCTE35-IN
屬性的#EXT-X-DATERANGE
標記,可指出廣告插播的立即結束接縫點。 SCTE35-OUT
和SCTE35-IN
的值應為十六進位編碼。
範例:
#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-DATERANGE
標記只會套用至變異播放清單中的下一個區段,即使 START-DATE
與區段的時間戳記不符也不例外。
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
代表,並搭配含有 cue-out 標記的事件串流。由於廣告插播期結束即表示廣告插播結束,因此不需要 cue-in 標記。
如果廣告插播期間的 SCTE-35 事件串流中出現多個 cue-out 事件,Video Stitcher API 只會使用第一個事件。系統會忽略 cue-out 事件的播放時間,因為插播廣告開始時間與時段的開始時間相同。
以下是 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
的事件串流,包含以清晰 XML 表示 SCTE-35 訊息的事件。
範例:
<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 在直播活動的資訊清單中收到 cue-out 廣告標記時,系統會同步處理廣告代碼。如果串流內容的使用者人數眾多,這項同步處理作業會觸發大量廣告代碼要求,並導致直播工作階段的播放要求延遲。
即將到來的廣告插播通知 (EABN) 會通知 Video Stitcher API 即將到來的廣告插播時間點,讓 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
必須與插入此標記的片段媒體時間相同。這個標記稱為「立即提示」。
以下資訊清單範例包含一個 EABN 提示結束、一個立即提示結束和一個提示開始:
#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 提示音相同。這個標記稱為「立即提示結束」。
以下範例資訊清單包含一個 EABN 提示結束、一個立即提示結束和一個提示開始:
#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
中第二次出現時,則表示廣告插播即將開始。
以下是資訊清單範例:
<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 工作。