ข้ามไปที่: ข้อกําหนดเกี่ยวกับไฟล์ Manifest และเนื้อหา | แพ็กเกจ แพลตฟอร์ม และโปรแกรมเล่น
ไฟล์ Manifest แบบหลายช่วงเวลาเทียบกับแบบช่วงเวลาเดียว
Ad Manager รองรับการนำเข้าทั้งไฟล์ Manifest แบบหลายช่วงเวลาและแบบช่วงเวลาเดียวสำหรับ DASH
หากเป็นไฟล์ Manifest แบบช่วงเวลาเดียว ผู้เผยแพร่โฆษณาจะให้สตรีม DASH แบบช่วงเวลาเดียวที่มีเนื้อหาและโอกาสสำหรับช่วงพักโฆษณารวมทั้งหมด ไม่ใช่แบบหลายช่วงเวลาที่จะแยกความแตกต่างของเนื้อหาและโอกาสสำหรับช่วงพักโฆษณา DAI รองรับไฟล์ Manifest แบบช่วงเวลาเดียวโดยการแปลงเป็นไฟล์ Manifest แบบหลายช่วงเวลาในการดึงข้อมูลทุกครั้ง
คุณเลือกได้ว่าจะให้ไฟล์ Manifest เป็นแบบช่วงเวลาเดียวหรือหลายช่วงเวลาเมื่อตั้งค่าไลฟ์สดใน Google Ad Manager และเลือก "DASH" เป็นรูปแบบสตรีมมิง
ใช้คู่มือนี้เพื่อดูสิ่งที่คาดหวังสำหรับไฟล์ Manifest แบบหลายช่วงเวลาและไฟล์ Manifest แบบช่วงเวลาเดียว นอกจากนี้ หากคุณใช้ไฟล์ Manifest แบบช่วงเวลาเดียว ภาคผนวกจะแสดงวิธีที่ DAI แปลงไฟล์ Manifest แบบช่วงเวลาเดียวเป็นไฟล์ Manifest แบบหลายช่วงเวลา
ข้อกําหนดของไฟล์ Manifest และเนื้อหา
สำหรับไฟล์ Manifest แบบหลายช่วงเวลาสิ่งที่คาดหวังสำหรับไฟล์ Manifest MPEG-DASH แบบหลายช่วงเวลา
Google DAI จะตรวจสอบความถูกต้องต่อไปนี้ในไฟล์ MPD ดิบ
- การตรวจสอบความถูกต้องขององค์ประกอบ MPD
- การตรวจสอบความถูกต้องขององค์ประกอบ Period
- การตรวจสอบความถูกต้องขององค์ประกอบ AdaptationSet
- การตรวจสอบความถูกต้องขององค์ประกอบ Representation
- การตรวจสอบความถูกต้องของ SegmentTemplate ที่มีเวลา
- การตรวจสอบความถูกต้องของคอมโพเนนต์เวลา
การตรวจสอบความถูกต้องขององค์ประกอบ MPD
Type
ตั้งค่าเป็นdynamic
Profile
ตั้งค่าเป็นurn:mpeg:dash:profile:isoff-live:2011
availabilityStartTime
ต้องไม่เป็น 0 และค่าต้องไม่เปลี่ยนแปลงระหว่างการพอลลิ่งต่อเนื่องของ MPDPublishTime
ต้องไม่เป็น 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$
- ระบบไม่ได้ใช้
S
tartNumber
ของ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>
- องค์ประกอบ SCTE-35
- ระยะเวลาของช่วงพักโฆษณาที่ระบุในเหตุการณ์
CUE-OUT
ควรเท่ากับระยะเวลารวมของทุกกลุ่มในช่วงเวลาของช่วงพักโฆษณา
ตัวทำเครื่องหมายโฆษณาที่รองรับ
ใน 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>
ใน 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
: จุดสิ้นสุดสำหรับโอกาสในตำแหน่งโฆษณาของผู้ให้บริการ
ใน 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>
ข้อมูลไบนารีของ 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
: การสิ้นสุดช่วงพัก
ข้อมูลไบนารีของ 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
: จุดสิ้นสุดสำหรับโฆษณาของผู้ให้บริการ
ข้อมูลไบนารีของ 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 ในฝรั่งเศส) |
สิ่งที่คาดหวังสำหรับไฟล์ Manifest MPEG-DASH แบบช่วงเวลาเดียว
Google DAI จะตรวจสอบความถูกต้องต่อไปนี้ในไฟล์ MPD ดิบ
- การตรวจสอบความถูกต้องขององค์ประกอบ MPD
- การตรวจสอบความถูกต้องขององค์ประกอบ Period
- การตรวจสอบความถูกต้องขององค์ประกอบ EventStream
- การตรวจสอบความถูกต้องขององค์ประกอบ AdaptationSet
- การตรวจสอบความถูกต้องขององค์ประกอบ Representation
- การตรวจสอบความถูกต้องของ SegmentTemplate ที่มีเวลา
- การตรวจสอบความถูกต้องของคอมโพเนนต์เวลา
การตรวจสอบความถูกต้องขององค์ประกอบ MPD
Type
ตั้งค่าเป็นdynamic
Profiles
ตั้งค่าเป็นurn:mpeg:dash:profile:isoff-live:2011
AvailabilityStartTime
ต้องไม่เป็น 0 และค่าต้องไม่เปลี่ยนแปลงระหว่างการพอลลิ่งต่อเนื่องของ MPDPublishTime
ต้องไม่เป็น 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
ต้องมากกว่าหรือเท่ากับ 0Period
มีองค์ประกอบ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$
- ระบบไม่ได้ใช้
S
tartNumber
ของ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 ดังต่อไปนี้
- การตรวจสอบความถูกต้องของจุดเชื่อมต่อ
- การตรวจสอบความถูกต้องของ splice_insert
- การตรวจสอบความถูกต้องของ Time_signal
- การตรวจสอบความถูกต้องของเวลาการนําเสนอ
- เหตุการณ์ข้อความ Periods, Cue-out และ Cue-in
การตรวจสอบความถูกต้องของจุดเชื่อมต่อ
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
ในบริบทนี้ จะมีการใช้จุดเชื่อมต่อเพื่อแบ่ง 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 ก่อนหมดระยะเวลาได้ ซึ่งเป็นวิธีที่ให้ระบบสามารถเรียกใช้การกลับคืนก่อนเวลา
- Google DAI จะตีความจุด Cue-in โดยนัยของ
การตรวจสอบความถูกต้องของ 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
โดยใช้จุดเชื่อมต่อก่อนหน้า
- หากมีการระบุจุด Cue-in สำหรับจุด Cue-out ที่มี
- 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
เดียวกันเท่านั้น
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 |
||
---|---|---|
2.1.0 |
การรองรับหลายช่วงเวลา |
|
1.47.3 |
การรองรับหลายช่วงเวลา |
|
1.11.17 | การรองรับช่วงเวลาเดียว |
โปรแกรมเล่น |
||
---|---|---|
Shaka |
แนะนำสำหรับการทดสอบ |
|
Bitmovin |
||
Exo-Player |
||
Dash.js |
ภาคผนวก
หากคุณใช้ไฟล์ 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>