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

เอกสารนี้อธิบายหลักเกณฑ์ในการใช้รูปแบบการนำส่งเนื้อหา Dynamic Adaptive Streaming ผ่าน HTTP (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

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

หลังจากนั้น โปรแกรมเปลี่ยนไฟล์สามารถรับ URL ฐานของปลายทางแบบเป็นโปรแกรมได้ผ่าน API สตรีมมิงแบบสดของ YouTube นอกจากนี้ URL หลักจะปรากฏใน UI การถ่ายทอดสดของ YouTube ด้วยหากคุณต้องการระบุ 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 โดย URL ต้องมีองค์ประกอบต่อไปนี้อย่างน้อย 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 URL ของ data: ซึ่งมีกลุ่มดังกล่าวจะต้องยาวไม่เกิน 100 KB

เอาต์พุตของตัวเข้ารหัส

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

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

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

การเข้ารหัส

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 ผิดรูปแบบ
  • โพสต์มีขนาดใหญ่เกินไป (> 10MB)
  • แยกวิเคราะห์ MPD ไม่ได้
  • กลุ่มการเริ่มต้นใน MPD เสียหาย

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

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

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

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

409 (Conflict)

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