การนําส่งเนื้อหา YouTube แบบสดผ่าน DASH

เอกสารนี้มีหลักเกณฑ์การใช้รูปแบบการนําส่ง DASH เพื่อสตรีมข้อมูลสดบน YouTube จากโปรแกรมเปลี่ยนไฟล์ โดยมีจุดประสงค์เพื่อช่วยให้ผู้ให้บริการโปรแกรมเปลี่ยนไฟล์เพิ่มการรองรับการนําส่ง DASH ไปยังผลิตภัณฑ์ของผู้ให้บริการแต่ละราย

ทําความเข้าใจ DASH

รายการด้านล่างจะแสดงฟีเจอร์และแอตทริบิวต์ของ DASH ที่สําคัญบางรายการ

  • ตามมาตรฐานแบบเปิด
  • อิงตาม HTTP ผลก็คือ DASH เป็นมิตรกับโครงสร้างพื้นฐานของอินเทอร์เน็ตและสามารถข้ามไฟร์วอลล์ได้
  • รองรับอัตราบิตในการโอนสูง DASH รองรับเซสชัน HTTP หลายเซสชันพร้อมกันและการนําส่งกลุ่มที่ไม่ใช่ลําดับ ให้ความยืดหยุ่นมากกว่าโปรโตคอลที่อาศัยการเชื่อมต่อ TCP เดียว
  • การส่งที่ปลอดภัยผ่าน HTTPS
  • การส่งแบบไม่เสียรายละเอียดผ่าน HTTP และ HTTPS
  • ตัวแปลงรหัสไม่ตายตัว
  • รองรับ MP4 ที่มี H264 และ AAC รวมถึง WebM ที่มี VP8/VP9 และ Vorbis/Opus

ข้อกำหนดเฉพาะ

ข้อกำหนด

ส่วนย่อยต่อไปนี้จะอธิบายข้อกําหนดในการใช้ DASH เพื่อส่งสตรีมแบบสดไปยัง YouTube

ช่วงเวลา

ปลายทาง YouTube DASH ทํางานเป็นเซิร์ฟเวอร์ HTTP แบบแพสซีฟ โดยจะบันทึกการเรียกเมธอด PUT ที่โปรแกรมเปลี่ยนไฟล์ส่งมา

  • ปลายทาง DASH รองรับการเชื่อมต่อ TCP พร้อมกัน คุณใช้การเชื่อมต่อซ้ําตาม HTTP/1.1 ได้
  • กลุ่ม MPD และการเริ่มต้นควรเป็น PUT ภายใน 3 วินาทีของกลุ่มสื่อแรก (เราขอแนะนําให้รวมกลุ่มการเริ่มต้นใน MPD)
  • กลุ่มหรือ MPD แต่ละรายการต้องใช้คําขอ PUT แยกต่างหาก ไม่รองรับการอัปโหลดหลายส่วน
  • การดําเนินการ PUT สําหรับกลุ่มสื่ออาจซ้อนทับกันตามเวลาเพื่อปรับปรุงแบนด์วิดท์การอัปโหลด
  • กลุ่มจะแสดงตามลําดับแบบไม่ต่อเนื่องได้ภายในระยะเวลาประมาณ 3 วินาที
  • กลุ่ม MPD และการเริ่มต้นควรได้รับการอัปเดตอย่างน้อยทุกๆ 60 วินาทีด้วย availabilityStartTime และ startNumber ที่อัปเดตแล้ว (ตามที่กล่าวไว้ข้างต้น กลุ่มการเริ่มต้นจะรวมอยู่ใน MPD ได้ ในกรณีนี้ คําขอ PUT 1 รายการจะอัปเดตทั้ง 2 กลุ่มได้)

โครงสร้าง URL

โปรแกรมเปลี่ยนไฟล์ต้องสร้าง URL ของ PUT ด้วยการเพิ่มสตริงต่อท้าย URL ปลายทางของ YouTube คุณต้องสร้างปลายทางการนําเข้า DASH โดยใช้ YouTube Live Streaming API

หลังจากนั้น โปรแกรมเปลี่ยนไฟล์จะขอ URL เริ่มต้นของปลายทางแบบเป็นโปรแกรมได้ผ่าน API สตรีมมิงแบบสดของ YouTube นอกจากนี้ URL ฐานจะปรากฏใน UI ของกิจกรรมใน YouTube ด้วยหากคุณต้องการระบุ URL ลงในโปรแกรมเปลี่ยนไฟล์ด้วยตนเอง

สตริงต่อท้าย URL พื้นฐานอาจมีชุดอักขระ ASCII ต่อไปนี้

  • ตัวพิมพ์เล็ก: a-z
  • ตัวพิมพ์ใหญ่: A-Z
  • เลข: 0-9
  • สัญลักษณ์พิเศษ: _ (ขีดล่าง) - (ขีดกลาง) (มหัพภาค)

URL ของ MPD

นอกเหนือจากข้อกําหนดข้างต้นแล้ว MPD ต้องลงท้ายด้วย .mpd ซึ่งจะช่วยให้เซิร์ฟเวอร์ YouTube ระบุ MPD ได้โดยง่ายURL ของกลุ่มอื่นๆ ต้องไม่ลงท้ายด้วย .mpd

URL การเริ่มต้นและ URL ของกลุ่มสื่อ

URL ของกลุ่มการเริ่มต้นและ URL ของกลุ่มสื่อทั้งหมดต้องลงท้ายด้วย .mp4 หากข้อมูลอยู่ในคอนเทนเนอร์ ISO BMFF หรือ .webm หากมีข้อมูลในคอนเทนเนอร์ WebM

เนื้อหา MPD

MPD ต้องสมบูรณ์และเป็นไปตามมาตรฐาน DASH โดยต้องมีหนึ่งในองค์ประกอบต่อไปนี้เท่านั้น รายการนี้ระบุองค์ประกอบที่จําเป็นโดย YouTube โดยเฉพาะ และมาตรฐาน DASH อาจระบุองค์ประกอบเพิ่มเติมที่จําเป็น องค์ประกอบจะแสดงโดยใช้ไวยากรณ์ XPath และสอดคล้องกับมาตรฐาน DASH

  • /mpd:MPD/attribute::type
  • /mpd:MPD/mpd:Period
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/attribute::mimeType (video/mp4 or video/webm)
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute::media
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute::initialization
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute::startNumber

โปรดดูข้อกําหนดต่อไปนี้สําหรับค่าองค์ประกอบ

  • แอตทริบิวต์ minimumUpdatePeriod ขององค์ประกอบ <MPD> ต้องตั้งเป็นค่าไม่เกิน 60 วินาที (PT60S)
  • แอตทริบิวต์ media ขององค์ประกอบ <SegmentTemplate> ต้องระบุว่า URL กลุ่มสื่อสร้างขึ้นโดยใช้ $Number$ (แอตทริบิวต์ startNumber จะระบุหมายเลขที่กําหนดให้กับกลุ่มสื่อแรก)

ความยาวของกลุ่มเป้าหมายเริ่มต้น

กลุ่มการเริ่มต้นต้องมีขนาดไม่เกิน 100 KB (โดยทั่วไปแล้ว กลุ่มเป้าหมายเริ่มต้นจะน้อยกว่ากลุ่มอื่นๆ มาก) หากกลุ่มเริ่มต้นรวมอยู่ใน MPD แล้ว data: URL ที่มีกลุ่มต้องมีขนาดไม่เกิน 100 KB

เอาต์พุตโปรแกรมเปลี่ยนไฟล์

กลุ่มการเริ่มต้นและกลุ่มสื่อจะต้องเป็นสตรีมไฟล์ ISO BMFF หรือ WebM แบบมัลติเพล็กซ์ที่มี GOP ปิด (กลุ่มรูปภาพ)

  • ขนาดของ GOP ควรมีความยาวประมาณ 2 วินาทีและต้องน้อยกว่า 8 วินาที
  • สตรีม Multiplex ต้องมีทั้งเสียงและวิดีโอ

แนวทางปฏิบัติแนะนําเพิ่มเติม

การเข้ารหัส

YouTube รองรับการเข้ารหัสสตรีมผ่าน HTTPS เราขอแนะนําอย่างยิ่งให้ใช้ฟีเจอร์นี้

กลุ่มการเริ่มต้นใน MPD

คุณสามารถแสดงกลุ่มการเริ่มต้นใน MPD ได้โดยตรงโดยใช้ URL data: ตาม RFC 2397 การดําเนินการนี้จะช่วยลดความซับซ้อนในการตั้งค่าสตรีมและลดโอกาสที่กลุ่มการเริ่มต้นจะไม่ตรงกับสตรีมส่วนที่เหลือ

XPath สําหรับองค์ประกอบนี้คือ

/mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute:data

ระยะเวลากลุ่มเป้าหมาย

เพื่อประสิทธิภาพในการนําเข้าที่ดีและข้อดีข้อเสียระหว่างอัตราการส่งข้อมูลกับเวลาในการตอบสนอง ความยาวของกลุ่มสื่อควรอยู่ระหว่าง 1 ถึง 5 วินาทีเราขอแนะนําอย่างยิ่งให้คุณสื่อสารระยะเวลาเป้าหมายของกลุ่มเหล่านั้นใน MPD โดยใช้องค์ประกอบ 2 อย่างต่อไปนี้

  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute::duration
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute::timescale

ระยะเวลาที่คํานวณจากแอตทริบิวต์เหล่านั้นควรอยู่ในช่วง 2 ของระยะเวลากลุ่มจริงทั้งหมดหรือประสิทธิภาพสตรีมมิงอาจลดลง

โปรดทราบว่าระยะเวลาเป้าหมายสําหรับการนําเข้าไม่เท่ากับระยะเวลากลุ่มสําหรับสตรีมแบบสดที่ YouTube สร้างขึ้น YouTube จะแปลงและแบ่งอินพุตใหม่ และระยะเวลาเป้าหมายเอาต์พุตจะขึ้นอยู่กับว่าสตรีมได้รับการเพิ่มประสิทธิภาพสําหรับคุณภาพการสตรีมหรือเวลาในการตอบสนอง

การลองใหม่และ Exponential Backoff

คุณควรดําเนินการกับคําขอ HTTP PUT ทั้งหมดโดยมีการกําหนดเวลา ซึ่งเราขอแนะนําให้ตั้งค่าเป็นค่า 500 มิลลิวินาทีที่นานกว่าระยะเวลาของกลุ่มเป้าหมาย

คําขอ PUT ของกลุ่มสื่อที่ล้มเหลว ไม่ว่าจะเป็นระยะหมดเวลาหรือข้อผิดพลาดอื่นๆ จะสอดคล้องกับช่องว่างในสตรีมวิดีโอ จึงต้องลองส่งคําขอดังกล่าวอีกครั้งโดยใช้Exponential Backoff แบบไบนารีแบบสุ่ม

  1. หลังจากล้มเหลว ให้รอแบบสุ่มช่วงเวลาระหว่าง [0 ... 100] มิลลิวินาที แล้วลองส่งคําขออีกครั้ง
  2. หากส่งคําขอไม่สําเร็จอีกครั้ง ให้รอแบบสุ่มช่วงเวลาระหว่าง [0 ... 200] มิลลิวินาที แล้วลองส่งคําขออีกครั้ง
  3. หากส่งคําขอไม่สําเร็จอีกครั้ง ให้รอแบบสุ่มช่วงเวลาระหว่าง [0 ... 400] มิลลิวินาที แล้วลองส่งคําขออีกครั้ง
  4. ฯลฯ

โปรดทราบว่าควรแจ้งความล้มเหลวซ้ําให้กับโอเปอเรเตอร์โปรแกรมเปลี่ยนไฟล์ เนื่องจากสอดคล้องกับการออกอากาศที่ล้มเหลว

โค้ดตอบกลับ HTTP

ส่วนต่อไปนี้จะอธิบายโค้ดตอบกลับที่ YouTube แสดงเพื่อตอบกลับกลุ่มที่ส่งผ่าน DASH

200 (ตกลง)

การตอบกลับ HTTP 200 (OK) บ่งบอกว่าเซิร์ฟเวอร์ YouTube ได้รับการดําเนินการที่คาดหวังและจัดการได้สําเร็จ

202 (Accepted)

การตอบกลับ HTTP 202 (ยอมรับ) สําหรับการดําเนินการ PUT หรือ POST ใดก็ตามเป็นการระบุว่าการดําเนินการนั้นไม่คาดคิดและยอมรับสําหรับการดําเนินการที่มีการเลื่อนเวลา อย่างไรก็ตาม การดําเนินการที่เลื่อนเวลาได้อาจประสบความสําเร็จหรือล้มเหลว ดังนั้นการตอบสนองจึงไม่รับประกันว่า YouTube จะประมวลผลการดําเนินการได้จริง

การตอบกลับนี้เกิดขึ้นบ่อยที่สุดเมื่อมีการนําส่งกลุ่มเป้าหมายตามลําดับ โดยปกติแล้ว YouTube จะประมวลผลกลุ่มที่ยอมรับได้อย่างถูกต้องหลังจากได้รับกลุ่มก่อนหน้าแล้ว และคุณไม่จําเป็นต้องส่งกลุ่มอีกครั้ง

เช่น YouTube จะแสดงผลคําตอบ 202 ได้ในกรณีต่อไปนี้

  • กลุ่มเริ่มต้นจะได้รับก่อน MPD
  • กลุ่มสื่อจะได้รับก่อนกลุ่ม MPD และกลุ่มเป้าหมายเริ่มต้น
  • ได้รับกลุ่มสื่อก่อนกลุ่มก่อนหน้า เช่น ได้รับกลุ่ม 3 ก่อนกลุ่ม 2

อย่างไรก็ตาม การตอบสนอง 202 ยังสามารถระบุว่าตัวระบุรายการไม่ถูกต้องหาก YouTube ไม่สามารถตรวจสอบตัวระบุได้อย่างสมบูรณ์เมื่อได้รับคําขอ POST หรือ PUT ตัวอย่างเช่น หนึ่งในเวลาที่เกิดเหตุการณ์เช่นนี้คือเมื่อ YouTube ได้รับและยอมรับกลุ่มการเริ่มต้นก่อนที่จะได้รับ MPD แต่กลุ่มการเริ่มต้นไม่ถูกต้อง ในกรณีนี้ YouTube ยอมรับกลุ่มการเริ่มต้นและแสดงผล 202 จากนั้นจะพิจารณาว่ากลุ่มถูกต้องหรือไม่เมื่อได้รับ MPD คุณหลีกเลี่ยงปัญหานี้ได้โดยรวมกลุ่มการเริ่มต้นใน MPD

400 (คําขอไม่ถูกต้อง)

การตอบกลับ HTTP 400 (คําขอไม่ถูกต้อง) บ่งบอกว่าเกิดปัญหาใดปัญหาหนึ่งต่อไปนี้

  • URL ไม่ถูกต้อง
  • โพสต์มีขนาดใหญ่เกินไป (> 10 MB)
  • แยกวิเคราะห์ MPD ไม่ได้
  • กลุ่มการเริ่มต้นใน MPD เสียหาย

401 (ไม่ได้รับอนุญาต)

การตอบกลับ HTTP 401 (ไม่ได้รับอนุญาต) บ่งบอกว่า URL ฐานสําหรับปลายทาง YouTube DASH เสียหายหรือหมดอายุ

405 (ไม่อนุญาตให้ใช้เมธอด)

การตอบกลับ HTTP 405 (ไม่อนุญาตวิธีการนี้) ระบุว่าคําขออื่นที่ไม่ใช่ POST หรือ PUT

409 (Conflict)

การตอบกลับ HTTP 409 (ความขัดแย้ง) ในการดําเนินการ PUT หรือ POST เป็นการระบุว่า YouTube ประมวลผลคําขอไม่ได้ ตัวอย่างเช่น การตอบกลับนี้อาจเกิดขึ้นหากผู้ขอส่งสื่อจํานวนมาก แต่ YouTube ยังไม่มี MPD, กลุ่มการเริ่มต้น หรือทั้งคู่ ในตัวอย่างดังกล่าว โปรแกรมเปลี่ยนไฟล์จะต้องส่งข้อมูลกลุ่ม MPD และการเริ่มต้นก่อน จึงจะลองส่งคําขอที่ล้มเหลวอีกครั้งได้

500 (ข้อผิดพลาดของเซิร์ฟเวอร์ภายใน)

การตอบกลับ HTTP 500 (ข้อผิดพลาดภายในเซิร์ฟเวอร์) บ่งบอกว่าเซิร์ฟเวอร์ประมวลผลคําขอไม่ได้ สําหรับข้อผิดพลาดนี้ เราขอแนะนําให้คุณส่งคําขออีกครั้งด้วยExponential Backoff

ตัวอย่าง

ลําดับ URL

ลําดับ URL ด้านล่างแสดงชุดคําขอ PUT ที่จะนําส่งสําหรับเนื้อหาผ่าน DASH ลําดับจะสมมติว่า URL ฐานสําหรับปลายทาง YouTube DASH คือ

http://upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=

ลําดับจะแสดงกลุ่ม MPD และการเริ่มต้นที่ส่งแยกกัน อย่างไรก็ตาม คุณเริ่มต้นกลุ่มการเริ่มต้นใน MPD ได้โดยตรง และเราขอแนะนําให้ทําตามแนวทางปฏิบัติดังกล่าว นอกจากนี้ กลุ่ม MPD และการเริ่มต้นควรอัปเดตอย่างน้อยทุก 60 วินาที ดังนั้นในที่สุดแล้ว URL สําหรับการสร้างกลุ่มเหล่านั้นจะเกิดขึ้นอีกครั้งในลําดับนี้ ตามด้วย URL สําหรับกลุ่มสื่อเพิ่มเติม

PUT upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=dash.mpd
PUT upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=init.mp4
PUT upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media001.mp4
PUT upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media002.mp4
PUT upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media003.mp4
...

กลุ่ม WebM

MPD ที่มีกลุ่มการเริ่มต้นที่ฝังไว้

MPD ตัวอย่างต่อไปนี้มีกลุ่มการเริ่มต้นที่ฝังไว้ใน URL ข้อมูล RFC 2397 เราขอแนะนําให้คุณฝังกลุ่มการเริ่มต้นในลักษณะนี้แทนที่จะส่งแยกต่างหาก

ตัวอย่างนี้เป็นไปตามการนําเข้าข้อมูลจาก WebM (VP8 หรือ VP9, Opus) ไปยัง YouTube URL ข้อมูลส่วนใหญ่ไม่มีสิทธิ์สําหรับการอ่าน:

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="urn:mpeg:dash:schema:mpd:2011"
     xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd"
     type="dynamic" 
     profiles="urn:mpeg:dash:profile:isoff-live:2011" 
     minimumUpdatePeriod="PT60S"
     minBufferTime="PT12S"
     availabilityStartTime="2016-04-13T20:52:58" >
  <Period start="PT0S" id="1">
    <AdaptationSet mimeType="video/webm">
      <ContentComponent contentType="video" id="1"/>
      <SegmentTemplate timescale="1000"
           duration="2000"
           startNumber="1"
           initialization="data:video/mp4;base64,AAAAGGZ0eXBpc...AAA"
           media="/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media-$Number%09d$.webm"/>
      <Representation id="1" width="1920" height="1080">
        <SubRepresentation contentComponent="1"/>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

MPD

MPD ตัวอย่างต่อไปนี้ซึ่งไม่มีกลุ่มการเริ่มต้นที่ฝังไว้ยังสอดคล้องกับการนําเข้า WebM (VP8 หรือ VP9, Opus) ไปยัง YouTube ด้วย

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="urn:mpeg:dash:schema:mpd:2011"
     xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd"
     type="dynamic" 
     profiles="urn:mpeg:dash:profile:isoff-live:2011" 
     minimumUpdatePeriod="PT60S"
     minBufferTime="PT12S"
     availabilityStartTime="2016-04-13T20:52:58" >
  <Period start="PT0S" id="1">
    <AdaptationSet mimeType="video/webm">
      <ContentComponent contentType="video" id="1"/>
      <SegmentTemplate timescale="1000"
           duration="2000"
           startNumber="1"
           initialization="/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=init.webm"
           media="/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media-$Number%09d$.webm"/>
      <Representation id="1" width="1920" height="1080">
        <SubRepresentation contentComponent="1"/>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

การเริ่มต้น

เลย์เอาต์ต่อไปนี้แสดงเลย์เอาต์ของกลุ่มการเริ่มต้น WebM ตัวอย่าง ซึ่งประกอบด้วยส่วนต่างๆ ของสตรีม WebM สูงสุด แต่ไม่รวมคลัสเตอร์แรก

สื่อ

เลย์เอาต์ต่อไปนี้แสดงเลย์เอาต์ของกลุ่มสื่อ WebM ตัวอย่าง ซึ่งประกอบด้วยคลัสเตอร์ WebM เดียว เช่นเดียวกับสตรีม ISO BMFF กลุ่มการเริ่มต้นที่แทรกไว้ข้างหน้าชุดคลัสเตอร์ควรสร้างสตรีม WebM ที่ถูกต้อง

กลุ่ม ISO BMFF

MPD ที่มีกลุ่มการเริ่มต้นที่ฝังไว้

MPD ตัวอย่างต่อไปนี้มีกลุ่มการเริ่มต้นที่ฝังไว้ใน URL ข้อมูล RFC 2397 เราขอแนะนําให้คุณฝังกลุ่มการเริ่มต้นในลักษณะนี้แทนที่จะส่งแยกต่างหาก

ตัวอย่างนี้เป็นไปตามการส่งผ่านข้อมูล ISO BMFF (H.264, AAC) ไปยัง YouTube URL ข้อมูลส่วนใหญ่ไม่มีสิทธิ์สําหรับการอ่าน:

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="urn:mpeg:dash:schema:mpd:2011"   
    xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" 
    type="dynamic"
    minimumUpdatePeriod="PT30S" 
    availabilityStartTime="2016-05-04T20:47:25" 
    minBufferTime="PT12S" 
    profiles="urn:mpeg:dash:profile:isoff-live:2011">
  <Period start="PT0S" id="1">
    <AdaptationSet mimeType="video/mp4" codecs="avc1.4d401e,mp4a.40.2">
      <ContentComponent contentType="video" id="1"/>
      <ContentComponent contentType="audio" id="2"/>
      <SegmentTemplate timescale="600"
             media="/dash_upload?cid=ug50-xg26-cbc1-2p0h&staging=1&copy=0&file=media$Number%09d$.mp4"
             initialization="data:video/mp4;base64,AAAAGGZ0eXBpc281AA...AA"
             duration="306"
             startNumber="1"/>
      <Representation id="1" width="640" height="360" bandwidth="526952">
        <SubRepresentation contentComponent="1" bandwidth="526952" 
codecs="avc1.4d401e"/>
        <SubRepresentation contentComponent="2" bandwidth="125584" codecs="mp4a.40.2"/>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

MPD

MPD ตัวอย่างต่อไปนี้ซึ่งไม่มีกลุ่มการเริ่มต้นที่ฝังไว้ยังสอดคล้องกับการนําเข้า ISO BMFF (H.264, AAC) ไปยัง YouTube อีกด้วย

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="urn:mpeg:dash:schema:mpd:2011"
     xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd"
     type="dynamic"
     profiles="urn:mpeg:dash:profile:isoff-live:2011"
     minimumUpdatePeriod="PT60S" 
     minBufferTime="PT12S"
     availabilityStartTime="2016-04-13T20:51:31" >
  <Period start="PT0S" id="1">
    <AdaptationSet mimeType="video/mp4" codecs="avc1.4d401e,mp4a.40.2">
      <ContentComponent contentType="video" id="1"/>
      <ContentComponent contentType="audio" id="2"/>
      <SegmentTemplate timescale="600"
           duration="1200"
           startNumber="1"
           initialization="/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=init.mp4"
           media="/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media$Number%09d$.mp4"/>
      <Representation id="1" width="640" height="360" bandwidth="526952">
        <SubRepresentation contentComponent="1" bandwidth="526952" codecs="avc1.4d401e"/>
        <SubRepresentation contentComponent="2" bandwidth="125584" codecs="mp4a.40.2"/>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

การเริ่มต้น

แผนภาพต่อไปนี้แสดงเลย์เอาต์ของกลุ่มการเริ่มต้น ISO BMFF แบบมัลติเพล็กซ์ YouTube ไม่จําเป็นต้องใช้อะตอมเสมอไป แต่ตัวอย่างนี้เป็นเพียงตัวอย่างที่สอดคล้องกัน โดยเฉพาะอย่างยิ่ง แทร็กเสียงและวิดีโอจะแสดง

สื่อ

แผนภาพต่อไปนี้แสดงเลย์เอาต์ของกลุ่มสื่อ ISO BMFF แบบมัลติเพล็กซ์ YouTube ไม่จําเป็นต้องใช้อะตอมทั้งหมด แต่นี่เป็นตัวอย่างที่สอดคล้องกัน โดยเฉพาะอย่างยิ่ง แทร็กเสียงและวิดีโอจะแสดง คุณสามารถเพิ่มชุดกลุ่มเหล่านี้ต่อท้ายกลุ่มเป้าหมายเริ่มต้นได้เพื่อสร้างสตรีม ISO BMFF ที่ถูกต้องและครบถ้วน

ข้อจํากัดที่ทราบ

การส่งผ่านข้อมูล RTMP และ DASH

คุณจะผสมการนําเข้า RTMP และ DASH ไปยัง YouTube ไม่ได้ข้อกําหนดนี้มีผลกับทั้ง 2 รายการระหว่างการออกอากาศ และการใช้ช่องเป็นวิธีการส่งผ่านข้อมูลหลัก และอีกวิธีสําหรับการนําเข้าสํารอง