การแจ้งเตือน

ใช้ได้เฉพาะใน Google Ad Manager 360 เท่านั้น

การสตรีมที่ปรับเปลี่ยนได้แบบไดนามิกผ่าน HTTP (DASH)

การเข้ารหัสช่วงพักโฆษณาไลฟ์สด (DASH)

 บุ๊กมาร์กข้ามไปที่: ข้อกําหนดเกี่ยวกับไฟล์ Manifest และเนื้อหา | แพ็กเกจ แพลตฟอร์ม และโปรแกรมเล่น

ไฟล์ Manifest แบบหลายช่วงเวลาเทียบกับแบบช่วงเวลาเดียว

Ad Manager รองรับการนำเข้าทั้งไฟล์ Manifest แบบหลายช่วงเวลาและแบบช่วงเวลาเดียวสำหรับ DASH

หากเป็นไฟล์ Manifest แบบช่วงเวลาเดียว ผู้เผยแพร่โฆษณาจะให้สตรีม DASH แบบช่วงเวลาเดียวที่มีเนื้อหาและโอกาสสำหรับช่วงพักโฆษณารวมทั้งหมด ไม่ใช่แบบหลายช่วงเวลาที่จะแยกความแตกต่างของเนื้อหาและโอกาสสำหรับช่วงพักโฆษณา DAI รองรับไฟล์ Manifest แบบช่วงเวลาเดียวโดยการแปลงเป็นไฟล์ Manifest แบบหลายช่วงเวลาในการดึงข้อมูลทุกครั้ง

คุณเลือกได้ว่าจะให้ไฟล์ Manifest เป็นแบบช่วงเวลาเดียวหรือหลายช่วงเวลาเมื่อตั้งค่าไลฟ์สดใน Google Ad Manager และเลือก "DASH" เป็นรูปแบบสตรีมมิง

ตัวเลือกประเภทไฟล์ Manifest ของ DASH ในอินเทอร์เฟซของ Ad Manager

ใช้คู่มือนี้เพื่อดูสิ่งที่คาดหวังสำหรับไฟล์ Manifest แบบหลายช่วงเวลาและไฟล์ Manifest แบบช่วงเวลาเดียว นอกจากนี้ หากคุณใช้ไฟล์ Manifest แบบช่วงเวลาเดียว ภาคผนวกจะแสดงวิธีที่ DAI แปลงไฟล์ Manifest แบบช่วงเวลาเดียวเป็นไฟล์ Manifest แบบหลายช่วงเวลา

การแทรกโฆษณาแบบไดนามิกของ Google ไม่รองรับการแยกกลุ่มเนื้อหา บทความนี้อธิบายถึงการรองรับการปรับสภาพไฟล์ Manifest เท่านั้น

ข้อกําหนดของไฟล์ Manifest และเนื้อหา

สำหรับไฟล์ Manifest แบบหลายช่วงเวลา

สิ่งที่คาดหวังสำหรับไฟล์ Manifest MPEG-DASH แบบหลายช่วงเวลา

Google DAI จะตรวจสอบความถูกต้องต่อไปนี้ในไฟล์ MPD ดิบ

การตรวจสอบความถูกต้องขององค์ประกอบ MPD

  • Type ตั้งค่าเป็น dynamic
  • Profile ตั้งค่าเป็น urn:mpeg:dash:profile:isoff-live:2011
  • availabilityStartTime ต้องไม่เป็น 0 และค่าต้องไม่เปลี่ยนแปลงระหว่างการพอลลิ่งต่อเนื่องของ MPD
  • PublishTime ต้องไม่เป็น 0 และค่าควรเพิ่มขึ้นหรือเท่าเดิมในระหว่างการพอลลิ่งต่อเนื่อง แต่ควรตั้งค่าแอตทริบิวต์ publishTime เป็นเวลาปัจจุบันในการอัปเดตแต่ละครั้ง
  • ต้องใช้ HTTPS เพื่อให้เนื้อหา DASH ที่อ้างอิงใน MPD เดียวกันมีความสมบูรณ์

ตัวอย่าง

<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 ต้องมากกว่าหรือเท่ากับ 0

    การดำเนินการนี้รองรับระยะเวลาตาม ISO-8601 ที่อาจรวมช่องวันที่เป็นจำนวนเต็มด้วยก็ได้ เช่น P3DT3H1M30S จะแทน 3 วัน, 3 ชั่วโมง, 1 นาที และ 30 วินาที

    ขณะนี้ยังไม่รองรับตัวระบุระยะเวลาเป็นปี เดือน และสัปดาห์ตาม ISO-8601

  • Period มีองค์ประกอบ AdaptationSet อย่างน้อย 1 รายการ
  • รูปแบบการกำหนดจะต้องเป็นเทมเพลตที่มีการกำหนดอิงตามจำนวนและเวลา

ตัวอย่าง

<Period start="PT0S">
  <AdaptationSet …>
    …
  </AdaptationSet>
  <AdaptationSet …>
    …
  </AdaptationSet>
</Period>

ระหว่างการพอลลิ่งต่อเนื่องของ MPD

  • คุณนำองค์ประกอบ Period ออกจากด้านบนของ MPD ได้เท่านั้น
  • คุณเพิ่มองค์ประกอบ Period ต่อท้าย MPD ได้เท่านั้น
  • คุณอัปเดตได้เฉพาะช่วงเวลาแรกและช่วงเวลาสุดท้ายใน MPD เท่านั้น และไม่ควรแก้ไขช่วงเวลาอื่นๆ ใน MPD การอัปเดตควรมีไว้สำหรับสิ่งต่อไปนี้เท่านั้น
    • การนํากลุ่มหรือเหตุการณ์ออกจากด้านบนสุดของช่วงเวลาแรก
    • เพิ่มกลุ่มหรือเหตุการณ์ใหม่ที่ด้านล่างสุดของช่วงเวลาสุดท้าย

การตรวจสอบความถูกต้องขององค์ประกอบ AdaptationSet

  • AdaptationSet มีองค์ประกอบ Representation อย่างน้อย 1 รายการ
  • หากมีอยู่ องค์ประกอบ ContentProtection ใน AdaptationSet และองค์ประกอบย่อยต่างๆ ต้องไม่มีการเปลี่ยนแปลงระหว่างการพอลลิ่งต่อเนื่องของ 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 ที่ใช้สำหรับ URL ของสื่อ
    • หากไม่ระบุ ระบบจะถือว่าค่านี้เป็น 0 สำหรับองค์ประกอบ S รายการแรก และสำหรับองค์ประกอบ S ที่ตามมา ค่านี้จะถือว่าเท่ากับผลรวมของเวลาการนําเสนอแรกสุดขององค์ประกอบ S ก่อนหน้า กับระยะเวลาที่ต่อเนื่องกัน ซึ่งก็คือค่า [ t + d × (r + 1) ] ขององค์ประกอบ S ก่อนหน้า)
    • ไฟล์ Manifest แบบหลายช่วงเวลารองรับทั้งไฟล์ $Time$ และ $Number$
    • ระบบไม่ได้ใช้ StartNumber ของ SegmentTemplate
  • ระหว่างการพอลลิ่งต่อเนื่องของ MPD
    • สามารถนํากลุ่มออกจากด้านบนของ SegmentTimeline ได้ก็ต่อเมื่อกลุ่มออกจากสแนปชอตของช่วงที่บันทึกด้วย DVR แล้วเท่านั้น
    • สามารถเพิ่มกลุ่มต่อท้าย 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

สิ่งที่คาดหวังสำหรับเหตุการณ์ข้อความ Cue-out และ Cue-in

Google DAI จะตรวจสอบความถูกต้องของเหตุการณ์ข้อความ Cue-out และ Cue-in ดังต่อไปนี้ เนื้อหาควรมีการปรับสภาพล่วงหน้าโดยอิงตามการดำเนินการต่อไปนี้

  • การนำเสนอสื่อต้องแบ่งออกเป็นช่วงเวลาต่างๆ โดย CUE-OUT และ CUE-IN แต่ละรายการของโฆษณาตอนกลางจะอยู่ที่เส้นแบ่งของช่วงเวลา
  • คุณต้องจัดเตรียมกลุ่มเนื้อหาที่จุดเริ่มต้นและจุดสิ้นสุดของแต่ละช่วงเวลาเพื่อให้ทุกๆ เฟรมในกลุ่มรวมอยู่ในช่วงเวลานั้นๆ
  • คีย์เฟรม/เฟรม IDR ควรตามจุดเริ่มโฆษณาและต้องอยู่ที่จุดเริ่มต้นของช่วงเวลานั้นๆ ซึ่งอาจต้องเป็นช่วงเวลาสิ้นสุดที่มีกลุ่มสั้นๆ เมื่อจุดเริ่มโฆษณาไม่ได้อยู่ตรงเส้นแบ่งตามปกติ

การส่งสัญญาณช่วงพักโฆษณา

  • เนื้อหาทั้งหมดที่เกี่ยวข้องกับช่วงพักโฆษณา 1 ครั้งต้องรวมอยู่ในช่วงเวลาต่อเนื่อง 1 ช่วงขึ้นไป และช่วงเวลาเหล่านั้นต้องมีเฉพาะกลุ่มเนื้อหาที่จะถูกแทนที่
  • ควรมีการส่งสัญญาณบอกสถานะ CUE-OUT ของช่วงพักโฆษณาในไฟล์ Manifest MPD ดังที่แสดงในตัวอย่างต่อไปนี้

    ตัวอย่างที่ 1

    • องค์ประกอบ SCTE-35 EventStream
    • SchemeIdUri="urn:scte:scte35:2014:xml+bin"
    • ให้คำจำกัดความไว้ในมาตรฐาน DASH

    <MPD>

    <Period start="PT0S" id="1">

       <!-- Content Period -->

       ...

    </Period>

    <Period start="PT32S" id="2">

        <!-- Ad Break Period -->

        <!-- The first segment of this period is the start of the ad break

        and the ad break ends with the last segment -->

        <EventStream timescale="90000"

        schemeIdUri="urn:scte:scte35:2014:xml+bin">

         <Event duration="2520000" id="1">

         <!-- The duration specified in this event should match the actual

         duration of the period as close as possible -->

            <Signal xmlns="http://www.scte.org/schemas/35/2016"

             <Binary>

               /DAlAAAAAAAAAP/wFAUAAAAEf+/+kybGyP4BSvaQAAEBAQAArky/3g==

             <Binary>

           </Signal>

          </Event>

        </EventStream> 

    </Period>

    <Period start="PT60S" id="3"> 

       <!-- Content Period -->

       ...

       </Period>

    </MPD>

    ตัวอย่างที่ 2

    • องค์ประกอบ SCTE-35 EventStream
    • SchemeIdUri="urn:scte:scte35:2013:xml"
    • ให้คำจำกัดความไว้ในมาตรฐาน DASH

    <MPD>

    <Period start="PT0S" id="1">

       <!-- Content Period -->

       ...

    </Period>

    <Period start="PT32S" id="2">

        <!-- Ad Break Period -->

        <!-- The first segment of this period is the start of the ad break

        and the ad break ends with the last segment -->

       <EventStream timescale="90000"

       schemeIdUri="urn:scte:scte35:2013:xml">

         <Event duration="2520000" id="1">

         <!-- The duration specified in this event should match the actual

           duration of the period as close as possible -->

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

        <!-- Content Period -->

        ...

    </Period>

    </MPD>

  • ระยะเวลาของช่วงพักโฆษณาที่ระบุในเหตุการณ์ CUE-OUT ควรเท่ากับระยะเวลารวมของทุกกลุ่มในช่วงเวลาของช่วงพักโฆษณา

ตัวทำเครื่องหมายโฆษณาที่รองรับ

การแทรกการเชื่อมต่อ XML ของ SCTE35

ใน DASH มาร์กอัป CUE จะแสดงร่วมกับขอบเขตเอลิเมนต์ Period ของ XML มาร์กอัป CUE จะระบุเป็น Event ภายในองค์ประกอบ EventStream ใน Period ขอบเขตเพิ่มเติมนี้เพียงพอที่จะระบุมาร์กอัป นอกจากนี้ เนื่องจากช่วงพักโฆษณาจะมีการทำเครื่องหมายด้วยขอบเขต Period จึงไม่จำเป็นต้องมีตัวทำเครื่องหมาย CUE-IN ที่ชัดเจน

ตัวอย่างนี้แสดงมาร์กอัป SCTE35 แบบ XML สำหรับ DASH ซึ่งคล้ายกับการแทรกการเชื่อมต่อไบนารีของ 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>

สัญญาณเวลา XML ของ SCTE35

ใน DASH มาร์กอัป CUE จะแสดงร่วมกับขอบเขตเอลิเมนต์ Period ของ XML มาร์กอัป CUE จะระบุเป็น Event ภายในองค์ประกอบ EventStream ใน Period ขอบเขตเพิ่มเติมนี้เพียงพอที่จะระบุมาร์กอัป นอกจากนี้ เนื่องจากช่วงพักโฆษณาจะมีการทำเครื่องหมายด้วยขอบเขต Period จึงไม่จำเป็นต้องมีตัวทำเครื่องหมาย CUE-IN ที่ชัดเจน

ตัวอย่างนี้แสดงมาร์กอัปของ SCTE35 ตาม XML สำหรับ DASH ซึ่งคล้ายกับสัญญาณเวลาไบนารีของ 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 จะแสดงร่วมกับขอบเขตเอลิเมนต์ Period ของ XML มาร์กอัป CUE จะระบุเป็น Event ภายในองค์ประกอบ EventStream ใน Period ขอบเขตเพิ่มเติมนี้เพียงพอที่จะระบุมาร์กอัป นอกจากนี้ เนื่องจากช่วงพักโฆษณาจะมีการทำเครื่องหมายด้วยขอบเขต Period จึงไม่จำเป็นต้องมีตัวทำเครื่องหมาย CUE-IN ที่ชัดเจน

ตัวอย่างนี้แสดงมาร์กอัปไบนารีของ SCTE35 สำหรับ DASH

ตัวอย่าง

<Period>

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">

      <Event duration="2520000" id="1">

       <สัญญาณ 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">

       <สัญญาณ 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">

       <สัญญาณ 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">

       <สัญญาณ 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 โดยไม่มีการแปลงเลขฐาน 16 (สตริงเริ่มต้นต้องเป็นสตริงที่เข้ารหัส UTF-8 ที่ถูกต้อง)
%%AFMM_CBC%% แยกโค้ดช่วงพักโฆษณาจากข้อมูลการเชื่อมต่อ (สิ่งนี้จำเป็นสําหรับข้อกําหนดเฉพาะของ AF2M ในฝรั่งเศส)
เนื้อหา DASH ต้องเป็นไปตามกฎทั้งหมดที่ระบุไว้ในข้อกำหนดและหลักเกณฑ์การให้บริการของคะแนนความสามารถในการทำงานร่วมกันของ DASH-IF
สำหรับไฟล์ Manifest แบบช่วงเวลาเดียว

สิ่งที่คาดหวังสำหรับไฟล์ Manifest MPEG-DASH แบบช่วงเวลาเดียว

Google DAI จะตรวจสอบความถูกต้องต่อไปนี้ในไฟล์ MPD ดิบ

การตรวจสอบความถูกต้องขององค์ประกอบ MPD

  • Type ตั้งค่าเป็น dynamic
  • Profiles ตั้งค่าเป็น urn:mpeg:dash:profile:isoff-live:2011
  • AvailabilityStartTime ต้องไม่เป็น 0 และค่าต้องไม่เปลี่ยนแปลงระหว่างการพอลลิ่งต่อเนื่องของ MPD
  • PublishTime ต้องไม่เป็น 0 และค่าควรเพิ่มขึ้นหรือเท่าเดิมในระหว่างการพอลลิ่งต่อเนื่อง
  • MPD มีองค์ประกอบ Period เพียง 1 รายการ
  • ต้องใช้ HTTPS เพื่อให้เนื้อหา DASH ที่อ้างอิงใน MPD เดียวกันมีความสมบูรณ์

ตัวอย่าง

<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 ต้องมากกว่าหรือเท่ากับ 0
  • Period มีองค์ประกอบ AdaptationSet อย่างน้อย 1 รายการ

ตัวอย่าง

<Period start="PT0S">
  <AdaptationSet …>
    …
  </AdaptationSet>
  <AdaptationSet …>
    …
  </AdaptationSet>
</Period>

การตรวจสอบความถูกต้องขององค์ประกอบ EventStream

ระหว่างการพอลลิ่งต่อเนื่องของ MPD

  • องค์ประกอบ Event จะนำออกจากด้านบนของ EventStream ได้เท่านั้น
  • องค์ประกอบ Event จะเพิ่มต่อท้าย EventStream ได้เท่านั้น

การตรวจสอบความถูกต้องขององค์ประกอบ AdaptationSet

  • AdaptationSet มีองค์ประกอบ Representation อย่างน้อย 1 รายการ
  • หากมีอยู่ องค์ประกอบ ContentProtection ใน AdaptationSet และองค์ประกอบย่อยต่างๆ ต้องไม่มีการเปลี่ยนแปลงระหว่างการพอลลิ่งต่อเนื่องของ 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 ที่ใช้สำหรับ URL ของสื่อ
    • หากไม่ระบุ ระบบจะถือว่าค่านี้เป็น 0 สำหรับองค์ประกอบ S รายการแรก และสำหรับองค์ประกอบ S ที่ตามมา ค่านี้จะถือว่าเท่ากับผลรวมของเวลาการนําเสนอแรกสุดขององค์ประกอบ S ก่อนหน้า กับระยะเวลาที่ต่อเนื่องกัน ซึ่งก็คือค่า [ t + d × (r + 1) ] ขององค์ประกอบ S ก่อนหน้า)
    • ไฟล์ Manifest แบบช่วงเวลาเดียวรองรับ $Time$ แต่ยังไม่รองรับ $Number$
    • ระบบไม่ได้ใช้ StartNumber ของ SegmentTemplate
  • ระหว่างการพอลลิ่งต่อเนื่องของ MPD
    • สามารถนํากลุ่มออกจากด้านบนของ SegmentTimeline ได้ก็ต่อเมื่อกลุ่มออกจากสแนปชอตของช่วงที่บันทึกด้วย DVR แล้วเท่านั้น
    • สามารถเพิ่มกลุ่มต่อท้าย 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

สิ่งที่คาดหวังสำหรับ Input SCTE-35 Marker

Google DAI จะตรวจสอบความถูกต้องของ Input SCTE-35 Marker ดังต่อไปนี้

การตรวจสอบความถูกต้องของจุดเชื่อมต่อ

Google DAI จะรับรู้ว่าจุดเชื่อมต่อคือ SCTE-35 Marker ที่ส่งมาในองค์ประกอบ DASH MPD Event ก็ต่อเมื่อจุดเชื่อมต่อนั้นผ่านการตรวจสอบความถูกต้องต่อไปนี้

  • ข้อมูล SCTE-35 ที่เข้ารหัส Base64 ต้องอยู่ในองค์ประกอบ Binary ขององค์ประกอบ Signal ของเหตุการณ์
    • รองรับ Splice_insert
    • รองรับ Time_signal ที่มีคําสั่ง segmentation_descriptor
  • องค์ประกอบ EventStream ที่มีเหตุการณ์ที่มี SCTE-35 Marker ต้องตั้งค่า schemeIdUri เป็น urn:scte:scte35:2014:xml+bin
  • ต้องตั้งค่าเนมสเปซ Signal เป็น http://www.scte.org/schemas/35/2016
  • สำหรับจุด Cue-out คุณต้องตั้งค่า presentationTime ใน Event
  • สำหรับจุด Cue-in คุณต้องตั้งค่า presentationTime ใน Event และต้องไม่ตั้งค่าช่วงเวลา
  • องค์ประกอบ Event ใน EventStream ต้องมีลำดับการจัดเรียงตาม presentationTime
จุดเชื่อมต่อเปิดโอกาสให้คุณเปลี่ยนจากแหล่งที่มาของสตรีมหนึ่งไปยังอีกแหล่งหนึ่ง จุดเชื่อมต่ออาจเป็นจุด Cue out ซึ่งเป็นโอกาสที่คุณจะสลับไปยังช่วงพักโฆษณา หรือจุด Cue-in ซึ่งเป็นโอกาสที่คุณจะกลับมาจากช่วงพักโฆษณา

ในบริบทนี้ จะมีการใช้จุดเชื่อมต่อเพื่อแบ่ง Period ออกเป็นเนื้อหาแยกกันและแบ่งองค์ประกอบ Period ตามเวลาการนำเสนอและ/หรือช่วงเวลาของจุดเชื่อมต่อ จุดเชื่อมต่อเหล่านี้มาจากองค์ประกอบ Event ที่มี SCTE-35 Marker

การตรวจสอบความถูกต้องของ splice_insert

  • จุด Cue-out คือ splice_insert ที่ตั้งค่า out_of_network_indicator เป็น 1
  • จุด Cue-in คือ splice_insert ที่ตั้งค่า out_of_network_indicator เป็น 0
  • จุด Cue-in จะใส่หรือไม่ใส่ก็ได้หาก Event ที่มีจุด Cue-out คือ splice_insert และการตั้งค่าของ duration ไม่เป็น 0
    • Google DAI จะตีความจุด Cue-in โดยนัยของ splice_insert ด้วย presentationTime ของจุด Cue-out + duration
    • เหตุการณ์ Cue-in ที่ชัดเจนสามารถสิ้นสุดจุด Cue-out ก่อนหมดระยะเวลาได้ ซึ่งเป็นวิธีที่ให้ระบบสามารถเรียกใช้การกลับคืนก่อนเวลา

การตรวจสอบความถูกต้องของ time_signal

  • จุด Cue-out คือ time_signal ที่มีการจับคู่ segmentation_descriptor กับ segmentation_type_id ดังนี้
    • 34 - การเริ่มช่วงพัก
    • 48 - จุดเริ่มต้นสำหรับโฆษณาของผู้ให้บริการ
    • 52 - จุดเริ่มต้นสำหรับโอกาสในตำแหน่งโฆษณาของผู้ให้บริการ
  • จุด Cue-in คือ time_signal ที่มีการจับคู่ segmentation_descriptor กับ segmentation_type_id ดังนี้
    • 35 - การสิ้นสุดช่วงพัก
    • 49 - จุดสิ้นสุดสำหรับโฆษณาของผู้ให้บริการ
    • 53 - จุดสิ้นสุดสำหรับโอกาสในตำแหน่งโฆษณาของผู้ให้บริการ
  • ไม่รองรับ segmentation_type_ids อื่นๆ ทั้งหมด
  • Time_signal ไม่รองรับการกลับคืนโดยอัตโนมัติจากช่วงพักโฆษณาที่มีจุด Cue-in ที่ชัดเจน

การตรวจสอบความถูกต้องของเวลาการนําเสนอ

Google DAI ไม่รองรับการแยกกลุ่มเนื้อหา จึงอนุญาตเฉพาะให้ระยะห่างระหว่างเวลาการนําเสนอของจุดเชื่อมต่อจากเส้นแบ่งกลุ่มที่ใกล้ที่สุดอยู่ที่ 100 มิลลิวินาทีเท่านั้น

  • เวลาการนําเสนอของจุดเชื่อมต่อจะสัมพันธ์กับ availabilityStartTime ของ MPD ด้วยการเพิ่ม presentationTime ของ Event ซึ่งปรับโดย timescale ของ EventStream ไปยัง start ของ Period

    เวลาการนําเสนอของจุด Cue-in โดยนัยจะคํานวณได้โดยเพิ่มระยะเวลาให้กับเวลาการนําเสนอของจุด Cue-out ที่เชื่อมโยงกันอยู่ ระยะเวลาของจุดเชื่อมต่อจะคํานวณด้วย duration ของ Event / timescale ของ EventStream

    ในบริบทนี้ ระบบจะไม่ใช้เวลาและระยะเวลา PTS ที่ระบุในสัญญาณ SCTE-35 เพื่อคํานวณเวลาหรือระยะเวลาการนําเสนอ

  • จุด Cue-out ต้องไม่อยู่ที่เส้นแบ่ง Segment เดียวกันกับจุด Cue-out หรือจุด Cue-in อื่น
  • จุด Cue-in 1 จุดขึ้นไปอาจอยู่ที่เส้นแบ่ง Segment เดียวกันได้ (เช่น ระบบจะทริกเกอร์ช่วงพักล่วงหน้าในเวลาเดียวกันกับเวลาสิ้นสุดจริงของช่วงพัก) ระบบจะไม่สนใจจุด Cue-in ที่ซ้ำกันเลย

เหตุการณ์ข้อความ Periods, Cue-out และ Cue-in

ระบบจะแทรก Periods ใหม่ทั้งในเวลาเริ่มต้นและสิ้นสุดของเหตุการณ์ Cue-out (หรือจุดเริ่มต้นของเหตุการณ์ Cue-out และ Cue-in) เมื่อสร้างการนําเสนอแบบหลายช่วงเวลาของไฟล์ Manifest แบบช่วงเวลาเดียว

  • จุดเริ่มต้นของ Period ใหม่ช่วงแรกจะแสดงโดยเวลาการนําเสนอของจุด Cue-out และจุดเริ่มต้นของ Period ใหม่ช่วงที่ 2 จะเป็นผลรวมของ presentationTime และ duration ของจุด Cue-out หรือ presentationTime ของจุด Cue-in หากมีระบุไว้
    • หากมีการระบุจุด Cue-in สำหรับจุด Cue-out ที่มี duration ระบบจะแยก Period โดยใช้จุดเชื่อมต่อก่อนหน้า
  • Google DAI จะไม่สนใจฟิลด์ splice_time, break_duration, auto_return และ splice_immediate_flag ในข้อความ SCTE-35

ต้องมี Event ที่ส่งสัญญาณข้อความ Cue-out สำหรับช่วงพักโฆษณาที่จบแล้ว

ซึ่งไม่ได้หมายความว่า Event แรกใน EventStream จะเป็นข้อความ Cue-out เสมอไป หากช่วงที่บันทึกด้วย DVR อินพุตนานพอ อาจมีเหตุการณ์ที่เป็นของช่วงพักโฆษณาก่อนหน้าในช่วงดังกล่าว

ข้อความ Cue-out จะสิ้นสุดด้วยข้อความ Cue-in ถัดไป

  • ระบบจะไม่สนใจรหัสการเชื่อมต่อ SCTE-35 (splice_event_id หรือ Segmentation_event_id) และแอตทริบิวต์ id ของเหตุการณ์
  • หากไม่ได้ตั้งค่า auto_return ข้อความ Cue-out ของ splice_insert ควรสิ้นสุดด้วยข้อความ Cue-in ของ splice_insert เท่านั้น
  • คุณควรคาดหวังข้อความ Cue-out ของ time_signal ให้สิ้นสุดด้วยข้อความ Cue-in ของ time_signal ที่มี segmentation_type_id เดียวกันเท่านั้น
ข้อความ Cue-out ที่ตามหลังข้อความ Cue-out อื่นมาติดๆ ก่อนสิ้นสุดระยะเวลาของข้อความจะปิดช่วงพักแรกและเริ่มช่วงพักอื่น (กล่าวคือมี 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>

แพลตฟอร์ม, Packager และโปรแกรมเล่นที่รองรับ

แพลตฟอร์ม

อุปกรณ์/เบราว์เซอร์

เวอร์ชัน

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

 

Packager

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

 

ภาคผนวก

หากคุณใช้ไฟล์ Manifest แบบช่วงเวลาเดียว ตัวอย่างเหล่านี้แสดงให้เห็นวิธีที่ DAI แปลงไฟล์ Manifest แบบช่วงเวลาเดียวเป็นแบบหลายช่วงเวลา

ตัวอย่างอินพุตของไฟล์ Manifest แบบช่วงเวลาเดียว

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

ตัวอย่างเอาต์พุตไฟล์ Manifest แบบหลายช่วงเวลา

<?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
เริ่มต้นใช้งานการแทรกโฆษณาแบบไดนามิก

คําแนะนําเกี่ยวกับการมอบประสบการณ์ในการใช้งานโฆษณาที่ราบรื่นตลอดเนื้อหาวิดีโอตามคําขอแบบสด ต่อเนื่อง และตามคําขอ
ดูคําแนะนํา

ค้นหา
ล้างการค้นหา
ปิดการค้นหา
เมนูหลัก
1107115436437471951
true
ค้นหาศูนย์ช่วยเหลือ
true
true
true
true
true
148
false
false