通知

僅適用於 Google Ad Manager 360。

基於 HTTP 的動態自動調整串流 (DASH)

直播廣告插播編碼 (DASH)

如需支援的 DASH 功能完整清單與整合詳細資料,請參閱這篇文章

 加入書籤跳至資訊清單和內容相關規定 | 封裝工具、平台和播放器

多時段與單一時段資訊清單

Ad Manager 支援擷取 DASH 適用的多時段資訊清單和單一時段資訊清單。

如果使用單一時段資訊清單,發布商可提供單一時段 DASH 串流,其中包含所有內容和廣告插播商機,而不是區分多個時段。DAI 會在每次擷取時,將單一時段資訊清單轉換為多時段資訊清單,藉此支援單一時段資訊清單。

在 Google Ad Manager 設定直播活動時,您可以選擇要以單一時段或多時段形式提供資訊清單,並選取「DASH」做為串流格式。

Ad Manager 介面中的 DASH 資訊清單類型選取器。

本指南會列出多時段資訊清單單一時段資訊清單的相關規範。此外,如果您是使用單一時段資訊清單,可以參閱附錄內容,瞭解 DAI 如何將單一時段資訊清單轉換成多時段資訊清單。

Google 的動態廣告插播不支援分割片段。本文只會說明資訊清單條件設定支援功能。

資訊清單和內容相關規定

多時段資訊清單

多時段 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 不可空白
  • 不得含有 SegmentBaseSegmentList 元素

示例

<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$
    • 不得使用 SegmentTemplatestartNumber
  • 在 MPD 的連續輪詢期間:
    • 片段必須先從 DVR 段落快照移出,才能從 SegmentTimeline 的頂端移除
    • 片段只能附加到 SegmentTimeline 的底部

示例

<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-OUTCUE-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>

  • CUE-OUT 事件中指定的廣告插播時間長度,應等於廣告插播時段中所有片段的總時間長度。

支援的廣告標記

SCTE35 XML 剪接插播

在 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>

SCTE35 XML 時間信號

在 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:供應商刊登位置商機結束

SCTE35 二進位檔剪接插播

在 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>

SCTE35 二進位檔時間信號:廣告插播開始/結束

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:廣告插播結束

SCTE35 二進位檔時間信號:供應商廣告開始/結束

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:供應商廣告結尾時間

SCTE35 二進位檔時間信號:供應商刊登位置商機

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-SCTE35EXT-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 規格的規定)。
DASH 內容必須遵守 DASH-IF Interoperability Points 中,「Service Offering Requirements and Guidelines」(服務提供規定和準則) 部分列出的所有規則。
單一時段資訊清單

單一時段 MPEG-DASH 資訊清單規範

Google DAI 會對原始 MPD 執行下列驗證:

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 不可空白
  • 不得含有 SegmentBaseSegmentList 元素

示例

<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$
    • 不得使用 SegmentTemplatestartNumber
  • 在 MPD 的連續輪詢期間:
    • 片段必須先從 DVR 段落快照移出,才能從 SegmentTimeline 的頂端移除
    • 片段只能附加到 SegmentTimeline 的底部

示例

<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_insertout_of_network_indicator 應設為 1
  • 顯示提示點是 splice_insertout_of_network_indicator 應設為 0
  • 只有在含有關閉提示點的 Eventsplice_insert,且 duration 設定的值不是零時,才能選用顯示提示點
    • Google DAI 會運用關閉提示點的 presentationTime + duration 顯示時間,解讀隱含的 splice_insert 顯示提示點
    • 如要提前結束關閉提示點,可使用明確的顯示提示點事件,這是提早返回正片的觸發方式。

time_signal 驗證

  • 關閉提示點是 time_signal,且 segmentation_descriptorsegmentation_type_id 符合:
    • 34 - 廣告插播開始
    • 48 - 供應商廣告開始
    • 52 - 供應商刊登位置商機開始
  • 顯示提示點是 time_signal,且 segmentation_descriptorsegmentation_type_id 符合:
    • 35 - 廣告插播結束
    • 49 - 供應商廣告結束
    • 53 - 供應商刊登位置商機結束
  • 不支援所有其他的 segmentation_type_ids
  • time_signal 不支援使用明確顯示提示點從廣告插播時間點自動返回

顯示時間驗證

Google DAI 不支援分割片段,因此剪接點顯示時間與最近的片段邊界最多只能相距 100 毫秒。

  • 剪接點的顯示時間是以 MPDavailabilityStartTime 為準,再將 EventpresentationTime (經過 EventStreamtimescale 調整) 加上 Period 的 start 即可算出。

    只要將時間長度新增至相關的關閉提示點顯示時間,就能計算隱含顯示提示點的顯示時間。剪接點時間長度的計算方法是 Eventduration/EventStreamtimescale

    在這種情況下,當系統在計算顯示時間或時間長度時,不會使用 SCTE-35 信號提供的 PTS 時間和時間長度。

  • 關閉提示點不得與另一個關閉提示點或顯示提示點位於相同的 Segment 邊界
  • 一或多個顯示提示點可位於同一個 Segment 邊界 (例如:預先廣告插播通知與廣告插播的實際結束時間同時觸發),這樣系統就能有效地忽略重複的顯示提示點

時段、關閉提示點和顯示提示點訊息事件

建立單一時段資訊清單的多時段顯示內容時,新的 Periods 會插入關閉提示點事件的開始和結束時間,或是關閉提示點和顯示提示點事件的開始時間。

  • 第一個新的 Period 開始時間,是以關閉提示點的顯示時間表示。第二個新的 Period 開始時間,則是 presentationTime 和關閉提示點 duration 或顯示提示點 presentationTime (如有提供) 的總和。
    • 如果設有 duration 的關閉提示點提供了顯示提示點,系統會使用較早的剪接點分割 Period
  • Google DAI 會忽略 SCTE-35 訊息中的 splice_timebreak_durationauto_returnsplice_immediate_flag 欄位

在整個廣告插播期間,都必須有傳送關閉提示點訊息信號的 Event

這不代表 EventStream 中的第一個 Event 一定是關閉提示點訊息。如果輸入 DVR 段落夠長,這個段落可能會涵蓋屬於先前廣告插播的事件。

關閉提示點訊息會由下一則顯示提示點訊息結束。

  • 系統會忽略 SCTE-35 剪接 ID (splice_event_idsegmentation_event_id) 和事件的 id 屬性
  • 如未設定 auto_returnsplice_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

 

分裝器

Shaka

2.1.0

多時段支援

Bitmovin

1.47.3

多時段支援

統一串流

1.11.17 單週期支援
 

播放器

Shaka

2.4.2

建議用於測試

Bitmovin

v7

 

Exo-Player

2.8.2

 

Dash.js

2.0

 

附錄

如果您是使用單一時段資訊清單,歡迎參考下列示例,瞭解 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>

如有任何與 DAI 疑難排解或服務中斷相關的問題,請與發布商支援團隊聯絡

這對您有幫助嗎?

我們應如何改進呢?
true
開始使用動態廣告插播

這份指南將說明如何在直播、線性和隨選影片內容之間提供流暢的廣告體驗。
參閱指南

搜尋
清除搜尋內容
關閉搜尋
主選單
7777677529909966216
true
搜尋說明中心
true
true
true
true
true
148
false
false