跳至:資訊清單和內容相關規定 | 封裝工具、平台和播放器
多時段與單一時段資訊清單
Ad Manager 支援擷取 DASH 適用的多時段資訊清單和單一時段資訊清單。
如果使用單一時段資訊清單,發布商可提供單一時段 DASH 串流,其中包含所有內容和廣告插播商機,而不是區分多個時段。DAI 會在每次擷取時,將單一時段資訊清單轉換為多時段資訊清單,藉此支援單一時段資訊清單。
在 Google Ad Manager 設定直播活動時,您可以選擇要以單一時段或多時段形式提供資訊清單,並選取「DASH」做為串流格式。
本指南會列出多時段資訊清單和單一時段資訊清單的相關規範。此外,如果您是使用單一時段資訊清單,可以參閱附錄內容,瞭解 DAI 如何將單一時段資訊清單轉換成多時段資訊清單。
資訊清單和內容相關規定
多時段資訊清單多時段 MPEG-DASH 資訊清單規範
Google DAI 會對原始 MPD 執行下列驗證:
MPD 元素驗證
type
應設為dynamic
profile
應設為urn:mpeg:dash:profile:isoff-live:2011
availabilityStartTime
不得為零,而且值不得在 MPD 的連續輪詢期間變更publishTime
不得為零,而且值在連續輪詢期間應遞增或保持相同。不過,publishTime
屬性每次更新時,都必須設為目前時間- 相同 MPD 中參照的 DASH 內容必須全部採用 HTTPS
示例
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" type="dynamic"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
availabilityStartTime="2022-01-01T10:00:00Z"
publishTime="2022-01-01T10:00:00Z"
minimumUpdatePeriod="PT25S" timeShiftBufferDepth="PTM0S" maxSegmentDuration="PT2S"
minBufferTime="PT2S">
<Period …>
…
</Period>
…
</MPD>
Period 元素驗證
-
start
必須大於或等於零這樣就能視需要在 ISO-8601 時間長度中納入整數天數欄位,例如:P3DT3H1M30S
代表 3 天 3 小時 1 分鐘 30 秒。ISO-8601 目前尚未支持「年」、「月」和「週」時間長度的標示符號。
Period
至少要有一個AdaptationSet
元素- 位址架構只能遵照數字和時間位址的範本
示例
<Period start="PT0S">
<AdaptationSet …>
…
</AdaptationSet>
<AdaptationSet …>
…
</AdaptationSet>
</Period>
在 MPD 的連續輪詢期間:
- 只能移除 MPD 頂端的
Period
元素 Period
元素只能附加到 MPD 的底部- 只有 MPD 中的第一個和最後一個時段可以更新,其他時段皆不得修改。您只能進行下列更新操作:
- 從第一個時段頂端移除片段或事件
- 在最後一個時段的底部新增片段或事件
AdaptationSet 元素驗證
AdaptationSet
至少要有一個Representation
元素- 如果
AdaptationSet
設有ContentProtection
元素和子元素,皆不得在 MPD 的連續輪詢期間變更
示例
<AdaptationSet mimeType="video/mp4" startWithSAP="1"
contentType="video" par="16:9"
minWidth="640" maxWidth="640" minHeight="360" maxHeight="360"
maxFrameRate="60/2"
segmentAlignment="true">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
<ContentComponent id="0" contentType="video" />
<Representation …>
…
</Representation>
<Representation …>
…
</Representation>
</AdaptationSet>
Representation 元素驗證
id
不可空白- 不得含有
SegmentBase
或SegmentList
元素
示例
<Representation width="640" height="360" sar="1:1" frameRate="60/2"
codecs="avc1.64001e" id="V300" bandwidth="300000">
…
</Representation>
SegmentTemplate 時間驗證
SegmentTimeline
S
元素可以包含用於媒體網址的t
屬性- 如未提供,系統會假設第一個
S
元素的值為0
。至於後續的S
元素,系統會假設這個值為前一個S
元素最早顯示時間和連續時間長度的總和,也就是 [t
+d
× (前一個S
元素的r
+ 1) ]) 的值。 - 多時段資訊清單同時支援
$Time$
和$Number$
- 不得使用
SegmentTemplate
的s
tartNumber
- 如未提供,系統會假設第一個
- 在 MPD 的連續輪詢期間:
- 片段必須先從 DVR 段落快照移出,才能從
SegmentTimeline
的頂端移除 - 片段只能附加到
SegmentTimeline
的底部
- 片段必須先從 DVR 段落快照移出,才能從
示例
<SegmentTemplate timescale="90000" initialization="$RepresentationID$/init.mp4"
media="$RepresentationID$/$Time$.m4s">
<SegmentTimeline>
<S t="0" d="270000" r="20" />
</SegmentTimeline>
</SegmentTimeline>
時間元件驗證
Google DAI 支援 ISO-8601 時間長度的時間元件部分,也允許加入選用整數天數元件:P0Y0M[n]DT[n]H[n]M[n]S。系統會依照 1 天 = 24 小時的原則,將天數元件轉換為時間長度,並加到時間元件中。系統可辨識的最低精細程度為奈秒。
有效的時間格式示例
P0Y0M
P0Y0M2D
P2D
PT3H
PT0H3M
P0Y0M0DT0H0M1.000S
P0Y0M1DT2H4M10S
PT0.000000001S
無效的時間格式示例
P
PT
2007-03-01
P5Y0M1DT2H4M1.000S
P0Y1.5M1DT2H4M1.000S
P0YiM1DT2H4M1.000S
P0Y0M.3DT0H0M1.000S
3h
PT100,000H
關閉提示點和顯示提示點訊息事件規範
Google DAI 會對關閉提示點和顯示提示點訊息事件執行下列驗證。請務必根據下列規範設定內容的先決條件:
- 媒體顯示期間必須分成多個時段,且每個片中廣告的
CUE-OUT
和CUE-IN
都落在時段邊界上。 - 必須備妥每個時段開始和結束時的內容片段,確保片段中的每個畫面格都包含在該時段內。
- 主要畫面格/IDR 畫面格應在提示點後面,且必須位於時段開始處。如果提示點並非落在自然邊界上,可能需要設定一個簡短的片段來做為結束時段。
廣告插播信號
- 與單一廣告插播相關的所有內容,都必須包含在一個或多個連續的時段中,而且這些時段只能含有要替換的內容片段。
-
務必在 MPD 資訊清單中發出廣告插播的
CUE-OUT
標示信號,如下列其中一個示例所示:示例 1
- SCTE-35
EventStream
元素 SchemeIdUri="urn:scte:scte35:2014:xml+bin"
- 在 DASH 標準中定義。
<MPD>
<Period start="PT0S" id="1">
<!-- 內容時段 -->
...
</Period>
<Period start="PT32S" id="2">
<!-- 廣告插播時段 -->
<!-- 這個時段的第一個片段為廣告插播的開頭
廣告插播結束於最後一個片段 -->
<EventStream timescale="90000"
schemeIdUri="urn:scte:scte35:2014:xml+bin">
<Event duration="2520000" id="1">
<!-- 這個事件中指定的時間長度應盡可能
與時段的實際長度相同 -->
<Signal xmlns="http://www.scte.org/schemas/35/2016"
<Binary>
/DAlAAAAAAAAAP/wFAUAAAAEf+/+kybGyP4BSvaQAAEBAQAArky/3g==
<Binary>
</Signal>
</Event>
</EventStream>
</Period>
<Period start="PT60S" id="3">
<!-- 內容時段 -->
...
</Period>
</MPD>
示例 2
- SCTE-35
EventStream
元素 SchemeIdUri="urn:scte:scte35:2013:xml"
- 在 DASH 標準中定義。
<MPD>
<Period start="PT0S" id="1">
<!-- 內容時段 -->
...
</Period>
<Period start="PT32S" id="2">
<!-- 廣告插播時段 -->
<!-- 這個時段的第一個片段為廣告插播的開頭
廣告插播結束於最後一個片段 -->
<EventStream timescale="90000"
schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="2520000" id="1">
<!-- 這個事件中指定的時間長度應盡可能
與時段的實際長度相同 -->
<SpliceInfoSection xmlns="urn:scte:scte35:2013:xml">
<SpliceInsert outOfNetworkIndicator="true"
spliceImmediateFlag="true">
<BreakDuration autoReturn="true"
duration="2520000"/>
</SpliceInsert>
</SpliceInfoSection>
</Event>
</EventStream>
</Period>
<Period start="PT60S" id="3">
<!-- 內容時段 -->
...
</Period>
</MPD>
- SCTE-35
CUE-OUT
事件中指定的廣告插播時間長度,應等於廣告插播時段中所有片段的總時間長度。
支援的廣告標記
在 DASH 中,CUE 標記會搭配 XML Period
元素界線。在 Period
內,CUE 標記會以 EventStream
元素內的 Event
元素提供。這個額外界線可充分識別標記。此外,由於廣告插播是以 Period
界線標示,因此不需要明確的 CUE-IN 標記。
這個範例顯示適用於 DASH 的 XML 式 SCTE35 標記。做法與 SCTE35 二進位檔剪接插播類似,但資料已經過剖析,並以 XML 而非二進位檔資料來呈現。
示例
<Period>
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="2520000" id="1">
<SpliceInfoSection xmlns="urn:scte:scte35:2013:xml">
<SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<BreakDuration autoReturn="true" duration="2520000"/>
</SpliceInsert>
</SpliceInfoSection>
</Event>
</EventStream>
</Period>
在 DASH 中,CUE 標記會搭配 XML Period
元素界線。在 Period
內,CUE 標記會以 EventStream
元素內的 Event
元素提供。這個額外界線可充分識別標記。此外,由於廣告插播是以 Period
界線標示,因此不需要明確的 CUE-IN 標記。
這個範例顯示適用於 DASH 的 XML 式 SCTE35 標記。做法與 SCTE35 二進位檔時間信號
類似,但資料已經過剖析,並以 XML 而非二進位檔資料來呈現。
示例
<Period>
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="2520000" id="1">
<SpliceInfoSection xmlns="urn:scte:scte35:2013:xml">
<TimeSignal outOfNetworkIndicator="true" spliceImmediateFlag="true">
<SpliceTime ptsTime="123123"/>
</TimeSignal>
<SegmentationDescriptor segmentationEventId="123123" segmentationEventCancelIndicator="false" segmentationDuration="123123">
<DeliveryRestrictions webDeliveryAllowedFlag="false" noRegionalBlackoutFlag="true" archiveAllowedFlag="false" deviceRestrictions="3"/>
<SegmentationUpid segmentationUpidType="14" segmentationTypeId="52" >11111</SegmentationUpid>
</SegmentationDescriptor>
</SpliceInfoSection>
</Event>
</EventStream>
</Period>
SegmentationTypeId
表示時間信號類型。
系統會將以下 SegmentationTypeId
值視為有效的 CUE-OUT 時間信號:
34
:廣告插播開始
48
:供應商廣告開始
52
:供應商刊登位置商機開始
系統會將下列 SegmentationTypeId
值視為有效的 CUE-IN 時間信號:
35
:廣告插播結束
49
:供應商廣告結束
53
:供應商刊登位置商機結束
在 DASH 中,CUE 標記會搭配 XML Period
元素界線。在 Period
內,CUE 標記會以 EventStream
元素內的 Event
元素提供。這個額外界線可充分識別標記。此外,由於廣告插播是以 Period
界線標示,因此不需要明確的 CUE-IN 標記。
這個範例顯示 DASH 的二進位檔 SCTE35 標記。
示例
<Period>
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">
<Event duration="2520000" id="1">
<Signal xmlns="http://www.scte.org/schemas/35/2016">
<Binary>
/DAlAAAAAAAAAP/wFAUAAAAEf+/+kybGyP4BSvaQAAEBAQAArky/3g==
</Binary>
</Signal>
</Event>
</EventStream>
...
<Period>
SCTE-35 二進位檔 (Base64 編碼) 資料必須經過解碼及剖析,才可判斷其中是否包含有效的 CUE-OUT/CUE-IN 以及任何指定廣告插播資訊。
舉例來說,下列二進位檔資料包含有效的 CUE-OUT 信號:
示例
<Period>
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">
<Event duration="2520000" id="1">
<Signal xmlns="http://www.scte.org/schemas/35/2016">
<Binary>
/DAsAAAAAyiYAP/wBQb/PVbrDQAWAhRDVUVJB48zWH//AAEuGvsAACIAAdRJqiI=
</Binary>
</Signal>
</Event>
</EventStream>
...
<Period>
解碼之後,訊息會包含以下欄位:
splice_command_type
設為 6 這個值,代表這是時間信號segmentation_type_id
表示時間信號類型
系統會將以下 segmentation_type_id
值視為有效的 CUE-OUT 時間信號:
34
:廣告插播開始
系統會將以下 segmentation_type_id
值 (當 splice_command_type = 6
) 視為有效的 CUE-IN 時間信號:
35
:廣告插播結束
SCTE-35 二進位檔 (Base64 編碼) 資料必須解碼及剖析,以判斷其中是否包含有效的 CUE-OUT/CUE-IN 以及任何指定廣告插播資訊。
舉例來說,下列二進位檔資料包含有效的 CUE-OUT 信號:
示例
<Period>
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">
<Event duration="2520000" id="1">
<Signal xmlns="http://www.scte.org/schemas/35/2016">
<Binary>
/DBcAAAAAAAAAP/wBQb//ciI8QBGAh1DVUVJXQk9EX+fAQ5FUDAxODAzODQwMDY2NiEEZAIZQ1VFSV0JPRF/3wABLit7AQVDMTQ2NDABAQEKQ1VFSQCAMTUwKnPhdcU=
</Binary>
</Signal>
</Event>
</EventStream>
...
<Period>
解碼之後,訊息會包含以下欄位:
splice_command_type
設為 6 這個值,代表這是時間信號segmentation_type_id
表示時間信號類型
系統會將以下 segmentation_type_id
值視為有效的 CUE-OUT 時間信號:
48
:供應商廣告開始時間
系統會將以下 segmentation_type_id
值 (當 splice_command_type = 6
) 視為有效的 CUE-IN 時間信號:
49
:供應商廣告結尾時間
SCTE-35 二進位檔 (Base64 編碼) 資料必須解碼及剖析,以判斷其中是否包含有效的 CUE-OUT/CUE-IN 以及任何指定廣告插播資訊。
舉例來說,下列二進位檔資料包含有效的 CUE-OUT 信號:
示例
<Period>
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">
<Event duration="2520000" id="1">
<Signal xmlns="http://www.scte.org/schemas/35/2016">
<Binary>
/DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==
</Binary>
</Signal>
</Event>
</EventStream>
...
<Period>
解碼之後,訊息會包含以下欄位:
splice_command_type
設為 6 這個值,代表這是時間信號segmentation_type_id
表示時間信號類型
系統會將以下 segmentation_type_id
值視為有效的 CUE-OUT 時間信號:
52
:供應商刊登位置商機開始
系統會將以下 segmentation_type_id
值 (當 splice_command_type = 6
) 視為有效的 CUE-IN 時間信號:
53
:供應商刊登位置商機結束
SCTE-35 標記的巨集
如果您的動態饋給包含 EXT-OATCLS-SCTE35
或 EXT-X-DATERANGE
標記,系統會自動擷取中繼資料並透過自訂鍵/值提供。您必須設定自訂鍵/值,並在產生廣告代碼時插入這些鍵/值當做巨集。
當您為 SCTE-35 欄位設定新的自訂鍵/值時,請使用自訂鍵 (例如「scte35」),並將該值設為與您的動態饋給欄位類型相對應的巨集:
巨集 | 說明 |
---|---|
%%SPLICE_INSERT_EVENT_ID%% |
SCTE35 訊息中不帶符號的整數會轉換為十進位數字字串。 |
%%SPLICE_INSERT_UPID%% |
|
%%TIME_SIGNAL_EVENT_ID%% |
|
%%TIME_SIGNAL_UPID%% |
顯示為小寫十六進位數值,不含 0x 前置字元。 |
%%TIME_SIGNAL_UPID_RAW%% |
插入 SCTE 訊息的原始位元組,不必經過十六進位轉換 (初始字串必須是有效的 UTF-8 編碼字串)。 |
%%AFMM_CBC%% |
從剪接資訊中擷取商業廣告插播程式碼 (這是法文 AF2M 規格的規定)。 |
單一時段 MPEG-DASH 資訊清單規範
Google DAI 會對原始 MPD 執行下列驗證:
- MPD 元素驗證
- Period 元素驗證
- EventStream 元素驗證
- AdaptationSet 元素驗證
- Representation 元素驗證
- SegmentTemplate 時間驗證
- 時間元件驗證
MPD 元素驗證
type
應設為dynamic
profiles
應設為urn:mpeg:dash:profile:isoff-live:2011
availabilityStartTime
不得為零,而且值不得在 MPD 的連續輪詢期間變更publishTime
不得為零,而且值在連續輪詢期間應遞增或保持相同- MPD 只能有一個
Period
元素 - 相同 MPD 中參照的 DASH 內容必須全部採用 HTTPS
示例
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" type="dynamic"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
availabilityStartTime="2022-01-01T10:00:00Z"
publishTime="2022-01-01T10:00:00Z"
minimumUpdatePeriod="PT25S" timeShiftBufferDepth="PTM0S" maxSegmentDuration="PT2S"
minBufferTime="PT2S">
<Period …>
…
</Period>
…
</MPD>
Period 元素驗證
start
必須大於或等於零Period
至少要有一個AdaptationSet
元素
示例
<Period start="PT0S">
<AdaptationSet …>
…
</AdaptationSet>
<AdaptationSet …>
…
</AdaptationSet>
</Period>
EventStream 元素驗證
在 MPD 的連續輪詢期間:
- 只能移除
EventStream
頂端的Event
元素 Event
元素只能附加到EventStream
的底部
AdaptationSet 元素驗證
AdaptationSet
至少要有一個Representation
元素- 如果
AdaptationSet
設有ContentProtection
元素和子元素,皆不得在 MPD 的連續輪詢期間變更
示例
<AdaptationSet mimeType="video/mp4" startWithSAP="1"
contentType="video" par="16:9"
minWidth="640" maxWidth="640" minHeight="360" maxHeight="360"
maxFrameRate="60/2"
segmentAlignment="true">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
<ContentComponent id="0" contentType="video" />
<Representation …>
…
</Representation>
<Representation …>
…
</Representation>
</AdaptationSet>
Representation 元素驗證
id
不可空白- 不得含有
SegmentBase
或SegmentList
元素
示例
<Representation width="640" height="360" sar="1:1" frameRate="60/2"
codecs="avc1.64001e" id="V300" bandwidth="300000">
…
</Representation>
SegmentTemplate $Time$ 驗證
SegmentTimeline
S
元素可以包含用於媒體網址的t
屬性- 如未提供,系統會假設第一個
S
元素的值為0
。至於後續的S
元素,系統會假設這個值為前一個S
元素最早顯示時間和連續時間長度的總和,也就是 [t
+d
× (前一個S
元素的r
+ 1) ]) 的值。 - 單一時段資訊清單目前只支援
$Time$
,尚未支援$Number$
- 不得使用
SegmentTemplate
的s
tartNumber
- 如未提供,系統會假設第一個
- 在 MPD 的連續輪詢期間:
- 片段必須先從 DVR 段落快照移出,才能從
SegmentTimeline
的頂端移除 - 片段只能附加到
SegmentTimeline
的底部
- 片段必須先從 DVR 段落快照移出,才能從
示例
<SegmentTemplate timescale="90000" initialization="$RepresentationID$/init.mp4"
media="$RepresentationID$/$Time$.m4s">
<SegmentTimeline>
<S t="0" d="270000" r="20" />
</SegmentTimeline>
</SegmentTimeline>
時間元件驗證
Google DAI 支援 ISO-8601 時間長度的時間元件部分,也允許加入選用整數天數元件:P0Y0M[n]DT[n]H[n]M[n]S。系統會依照 1 天 = 24 小時的原則,將天數元件轉換為時間長度,並加到時間元件中。系統可辨識的最低精細程度為奈秒。
有效的時間格式示例
P0Y0M
P0Y0M2D
P2D
PT3H
PT0H3M
P0Y0M0DT0H0M1.000S
P0Y0M1DT2H4M10S
PT0.000000001S
無效的時間格式示例
P
PT
2007-03-01
P5Y0M1DT2H4M1.000S
P0Y1.5M1DT2H4M1.000S
P0YiM1DT2H4M1.000S
P0Y0M.3DT0H0M1.000S
3h
PT100,000H
SCTE-35 輸入標記規範
Google DAI 會對 SCTE-35 輸入標記執行下列驗證:
剪接點驗證
剪接點必須通過下列驗證,Google DAI 才會將剪接點辨識為 DASH MPD Event
元素中包含的 SCTE-35 標記:
- 事件
Signal
元素的Binary
元素必須含有採用 Base64 編碼格式的 SCTE-35 資料- 支援
splice_insert
- 支援含有
segmentation_descriptor
指令的time_signal
- 支援
- 如果
EventStream
元素包含設有 SCTE-35 標記的事件,schemeIdUri
必須設為urn:scte:scte35:2014:xml+bin
Signal
命名空間必須設為http://www.scte.org/schemas/35/2016
- 使用關閉提示點時,必須設定
Event
中的presentationTime
- 使用顯示提示點時,必須設定
Event
中的presentationTime
,但不得設定時間長度 EventStream
中的Event
元素必須按照presentationTime
排序
在這種情況下,剪接點的作用是將 Period
分割為不同內容,系統會根據剪接點的顯示時間和/或時間長度細分 Period
元素。這些剪接點是由設有 SCTE-35 標記的 Event
元素提供。
splice_insert 驗證
- 關閉提示點是
splice_insert
,out_of_network_indicator
應設為1
- 顯示提示點是
splice_insert
,out_of_network_indicator
應設為0
- 只有在含有關閉提示點的
Event
是splice_insert
,且duration
設定的值不是零時,才能選用顯示提示點- Google DAI 會運用關閉提示點的
presentationTime
+duration
顯示時間,解讀隱含的splice_insert
顯示提示點 - 如要提前結束關閉提示點,可使用明確的顯示提示點事件,這是提早返回正片的觸發方式。
- Google DAI 會運用關閉提示點的
time_signal 驗證
- 關閉提示點是
time_signal
,且segmentation_descriptor
的segmentation_type_id
符合:- 34 - 廣告插播開始
- 48 - 供應商廣告開始
- 52 - 供應商刊登位置商機開始
- 顯示提示點是
time_signal
,且segmentation_descriptor
的segmentation_type_id
符合:- 35 - 廣告插播結束
- 49 - 供應商廣告結束
- 53 - 供應商刊登位置商機結束
- 不支援所有其他的
segmentation_type_ids
time_signal
不支援使用明確顯示提示點從廣告插播時間點自動返回
顯示時間驗證
Google DAI 不支援分割片段,因此剪接點顯示時間與最近的片段邊界最多只能相距 100 毫秒。
-
剪接點的顯示時間是以
MPD
的availabilityStartTime
為準,再將Event
的presentationTime
(經過EventStream
的timescale
調整) 加上Period
的start
即可算出。只要將時間長度新增至相關的關閉提示點顯示時間,就能計算隱含顯示提示點的顯示時間。剪接點時間長度的計算方法是
Event
的duration
/EventStream
的timescale
。在這種情況下,當系統在計算顯示時間或時間長度時,不會使用 SCTE-35 信號提供的 PTS 時間和時間長度。
- 關閉提示點不得與另一個關閉提示點或顯示提示點位於相同的
Segment
邊界 - 一或多個顯示提示點可位於同一個
Segment
邊界 (例如:預先廣告插播通知與廣告插播的實際結束時間同時觸發),這樣系統就能有效地忽略重複的顯示提示點
時段、關閉提示點和顯示提示點訊息事件
建立單一時段資訊清單的多時段顯示內容時,新的 Periods
會插入關閉提示點事件的開始和結束時間,或是關閉提示點和顯示提示點事件的開始時間。
- 第一個新的
Period
開始時間,是以關閉提示點的顯示時間表示。第二個新的Period
開始時間,則是presentationTime
和關閉提示點duration
或顯示提示點presentationTime
(如有提供) 的總和。- 如果設有
duration
的關閉提示點提供了顯示提示點,系統會使用較早的剪接點分割Period
- 如果設有
- Google DAI 會忽略 SCTE-35 訊息中的
splice_time
、break_duration
、auto_return
和splice_immediate_flag
欄位
在整個廣告插播期間,都必須有傳送關閉提示點訊息信號的 Event
。
這不代表 EventStream
中的第一個 Event
一定是關閉提示點訊息。如果輸入 DVR 段落夠長,這個段落可能會涵蓋屬於先前廣告插播的事件。
關閉提示點訊息會由下一則顯示提示點訊息結束。
- 系統會忽略 SCTE-35 剪接 ID (
splice_event_id
或segmentation_event_id
) 和事件的id
屬性 - 如未設定
auto_return
,splice_insert
關閉提示點訊息就只能由splice_insert
顯示提示點訊息結束 time_signal
關閉提示點訊息只能由segmentation_type_id
相同的time_signal
顯示提示點訊息結束
Period
)。示例
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="600" presentationTimeOffset="991724821200">
<Event presentationTime="992568282204" duration="18073" id="1615447966">
<Signal xmlns="http://www.scte.org/schemas/35/2016">
<Binary>/DAbAAAAAAAAAP/wCgUAAAAAf98AAAAAAAAHeq0Q</Binary>
</Signal>
</Event>
<Event presentationTime="992568300277" id="1085695472">
<Signal xmlns="http://www.scte.org/schemas/35/2016">
<Binary>/DAbAAAAAAAAAP/wCgUAAAAAf18AAAAAAAAqqkN1</Binary>
</Signal>
</Event>
</EventStream>
支援的平台、封裝工具和播放器
平台 |
||
---|---|---|
裝置/瀏覽器 |
版本 |
DRM |
Chrome 瀏覽器 |
66+ |
Widevine |
Firefox 瀏覽器 |
60+ |
Widevine |
Microsoft Edge |
18 |
PlayReady |
Android |
4.4+ |
Widevine |
Chromecast |
Gen2,Ultra (CAF API) |
Widevine |
Roku |
3, 4 (韌體 8.1) |
PlayReady |
分裝器 |
||
---|---|---|
2.1.0 |
多時段支援 |
|
1.47.3 |
多時段支援 |
|
1.11.17 | 單週期支援 |
播放器 |
||
---|---|---|
Shaka |
建議用於測試 |
|
Bitmovin |
||
Exo-Player |
||
Dash.js |
附錄
如果您是使用單一時段資訊清單,歡迎參考下列示例,瞭解 DAI 如何將單一時段資訊清單轉換成多時段資訊清單。
單一時段資訊清單輸入示例
<?xml version="1.0" encoding="UTF-8"?>
<MPD availabilityStartTime="2017-01-01T10:00:00Z" id="id1" maxSegmentDuration="PT2S" minBufferTime="PT2S" minimumUpdatePeriod="PT25S" profiles="urn:mpeg:dash:profile:isoff-live:2011" publishTime="2017-01-01T10:00:00Z" timeShiftBufferDepth="PT5M" type="dynamic" ns1:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:ns1="http://www.w3.org/2001/XMLSchema-instance">
<BaseURL>http://example.com/dash/</BaseURL>
<Period id="1" start="PT0S">
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2014:xml+bin">
<Event duration="2700000" presentationTime="270000" id="1">
<Signal xmlns="http://www.scte.org/schemas/35/2016">
<Binary>/DAlAAAAAAAAAP/wFAUAAA+if+/+INAJ0P4AKTLgAAAAAAAA9UTkTA==</Binary>
</Signal>
</Event>
<Event presentationTime="2970000" id="2">
<Signal xmlns="http://www.scte.org/schemas/35/2016">
<Binary>/DAgAAAAAAAAAP/wDwUAAA+if0/+IPk8sAAAAAAAAH3XbUE=</Binary>
</Signal>
</Event>
</EventStream>
<AdaptationSet contentType="audio" lang="eng" mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" />
<SegmentTemplate timescale="44100" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/$Number$.m4s">
<SegmentTimeline>
<S t="0" d="132300" r="20" />
</SegmentTimeline>
</SegmentTemplate>
<Representation audioSamplingRate="48000" bandwidth="48000" codecs="mp4a.40.2" id="A48">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2" />
</Representation>
</AdaptationSet>
<AdaptationSet contentType="video" maxFrameRate="60/2" maxHeight="360" maxWidth="640" mimeType="video/mp4" minHeight="360" minWidth="640" par="16:9" segmentAlignment="true" startWithSAP="1">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" />
<SegmentTemplate timescale="90000" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/$Number$.m4s">
<SegmentTimeline>
<S t="0" d="270000" r="20" />
</SegmentTimeline>
</SegmentTemplate>
<Representation bandwidth="300000" codecs="avc1.64001e" frameRate="60/2" height="360" id="V300" sar="1:1" width="640" />
</AdaptationSet>
</Period>
</MPD>
多時段資訊清單輸出示例
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:XMLSchema-instance="http://www.w3.org/2001/XMLSchema-instance" XMLSchema-instance:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" id="id1" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" availabilityStartTime="2017-01-01T10:00:00Z" publishTime="2017-01-01T10:00:00Z" minimumUpdatePeriod="PT25S" minBufferTime="PT2S" timeShiftBufferDepth="PT5M0S" maxSegmentDuration="PT2S">
<BaseURL>http://example.com/dash/</BaseURL>
<Period id="0s" start="PT0S">
<AdaptationSet mimeType="audio/mp4" startWithSAP="1" lang="eng" contentType="audio" segmentAlignment="true">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
<SegmentTemplate timescale="44100" presentationTimeOffset="0" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">
<SegmentTimeline>
<S d="132300"></S>
</SegmentTimeline>
</SegmentTemplate>
<Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="A48" bandwidth="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
</Representation>
</AdaptationSet>
<AdaptationSet mimeType="video/mp4" startWithSAP="1" contentType="video" par="16:9" minWidth="640" maxWidth="640" minHeight="360" maxHeight="360" maxFrameRate="60/2" segmentAlignment="true">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
<SegmentTemplate timescale="90000" presentationTimeOffset="0" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">
<SegmentTimeline>
<S d="270000"></S>
</SegmentTimeline>
</SegmentTemplate>
<Representation width="640" height="360" sar="1:1" frameRate="60/2" codecs="avc1.64001e" id="V300" bandwidth="300000"></Representation>
</AdaptationSet>
</Period>
<Period id="3s" start="PT3S">
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">
<Event duration="2700000" id="1">
<Signal xmlns="http://www.scte.org/schemas/35/2016">
<Binary>/DAlAAAAAAAAAP/wFAUAAA+if+/+INAJ0P4AKTLgAAAAAAAA9UTkTA==</Binary>
</Signal>
</Event>
</EventStream>
<AdaptationSet mimeType="audio/mp4" startWithSAP="1" lang="eng" contentType="audio" segmentAlignment="true">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
<SegmentTemplate timescale="44100" presentationTimeOffset="132300" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">
<SegmentTimeline>
<S t="132300" d="132300" r="9"></S>
</SegmentTimeline>
</SegmentTemplate>
<Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="A48" bandwidth="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
</Representation>
</AdaptationSet>
<AdaptationSet mimeType="video/mp4" startWithSAP="1" contentType="video" par="16:9" minWidth="640" maxWidth="640" minHeight="360" maxHeight="360" maxFrameRate="60/2" segmentAlignment="true">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
<SegmentTemplate timescale="90000" presentationTimeOffset="270000" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">
<SegmentTimeline>
<S t="270000" d="270000" r="9"></S>
</SegmentTimeline>
</SegmentTemplate>
<Representation width="640" height="360" sar="1:1" frameRate="60/2" codecs="avc1.64001e" id="V300" bandwidth="300000"></Representation>
</AdaptationSet>
</Period>
<Period id="33s" start="PT33S">
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">
<Event id="2">
<Signal xmlns="http://www.scte.org/schemas/35/2016">
<Binary>/DAgAAAAAAAAAP/wDwUAAA+if0/+IPk8sAAAAAAAAH3XbUE=</Binary>
</Signal>
</Event>
</EventStream>
<AdaptationSet mimeType="audio/mp4" startWithSAP="1" lang="eng" contentType="audio" segmentAlignment="true">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
<SegmentTemplate timescale="44100" presentationTimeOffset="1455300" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">
<SegmentTimeline>
<S t="1455300" d="132300" r="9"></S>
</SegmentTimeline>
</SegmentTemplate>
<Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="A48" bandwidth="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
</Representation>
</AdaptationSet>
<AdaptationSet mimeType="video/mp4" startWithSAP="1" contentType="video" par="16:9" minWidth="640" maxWidth="640" minHeight="360" maxHeight="360" maxFrameRate="60/2" segmentAlignment="true">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
<SegmentTemplate timescale="90000" presentationTimeOffset="2970000" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">
<SegmentTimeline>
<S t="2970000" d="270000" r="9"></S>
</SegmentTimeline>
</SegmentTemplate>
<Representation width="640" height="360" sar="1:1" frameRate="60/2" codecs="avc1.64001e" id="V300" bandwidth="300000"></Representation>
</AdaptationSet>
</Period>
</MPD>