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

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

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

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

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

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

ข้อกำหนด

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

ช่วงเวลา

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

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

โครงสร้าง URL

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

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

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

  • ตัวอักษรพิมพ์เล็ก: a-z
  • ตัวอักษรพิมพ์ใหญ่: A-Z
  • ตัวเลข: 0-9
  • อักขระพิเศษ: _ (ขีดล่าง), - (ขีดกลาง), . (เครื่องหมายจุด)

URL ของ MPD

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

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

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

เนื้อหา MPD

MPD ต้องสมบูรณ์และเป็นไปตามมาตรฐาน DASH ต้องมีองค์ประกอบต่อไปนี้อย่างละ 1 รายการ รายการนี้ระบุองค์ประกอบที่ 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 วินาที
  • สตรีมแบบมัลติเพล็กซ์ต้องมีทั้งแทร็กเสียงและแทร็กวิดีโอ

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

การเข้ารหัส

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

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

คุณสามารถแสดงกลุ่มการเริ่มต้นใน MPD ได้โดยตรงโดยใช้ data: URL ตาม 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 ฐานสำหรับปลายทาง DASH ของ YouTube เสียหายหรือหมดอายุ

405 (ไม่อนุญาตให้ใช้วิธีนี้)

การตอบกลับ HTTP 405 (ไม่อนุญาตเมธอด) แสดงว่ามีการส่งคำขออื่นที่ไม่ใช่ POST หรือ PUT

409 (Conflict)

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

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

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

ตัวอย่าง

ลําดับ URL

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

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 วิธีในระหว่างการออกอากาศ รวมถึงการใช้วิธีหนึ่งเป็นวิธีการส่งผ่านข้อมูลหลักและอีกวิธีหนึ่งสำหรับการส่งผ่านข้อมูลสำรอง