डैश के ज़रिए YouTube पर लाइव कॉन्टेंट डिलीवर करना

इस दस्तावेज़ में, एन्कोडर से YouTube पर लाइव डेटा स्ट्रीम करने के लिए डैश डिलीवरी फ़ॉर्मैट का इस्तेमाल करने के बारे में दिशा-निर्देश दिए गए हैं. इसका मकसद एन्कोडर के वेंडर को उनके प्रॉडक्ट की डिलीवरी में मदद करना है.

डैश को समझना

नीचे दी गई सूची में कुछ DASH सुविधाओं और विशेषताओं की सूची दी गई है:

  • खुले मानकों पर आधारित.
  • एचटीटीपी पर आधारित. इसके चलते, DASH इंटरनेट इंफ़्रास्ट्रक्चर के हिसाब से है और यह फ़ायरवॉल से बच सकता है.
  • हाई ट्रांसफ़र बिटरेट के साथ काम करता है. DASH एक साथ कई एचटीटीपी सेशन और बिना क्रम के होने वाले सेगमेंट की डिलीवरी की सुविधा देता है. यह ऐसे प्रोटोकॉल से ज़्यादा रेज़िबिलिटी देता है जो किसी एक टीसीपी कनेक्शन पर निर्भर होते हैं.
  • एचटीटीपीएस के ज़रिए सुरक्षित डिलीवरी.
  • एचटीटीपी और एचटीटीपीएस की मदद से, गड़बड़ी ठीक करें.
  • कोडेक एग्नोस्टिक.
  • H464 और AAC वाले MP4 के साथ-साथ, VP8/VP9 और Vorbis/Opus वाले WebM फ़ॉर्मैट के साथ काम करता है.

खास जानकारी

ज़रूरी शर्तें

नीचे दिए गए सब-सेक्शन में, YouTube पर लाइव स्ट्रीम डिलीवर करने के लिए डैश का इस्तेमाल करने से जुड़ी ज़रूरी शर्तों के बारे में बताया गया है.

दिखने की अवधि

YouTube डैश एंडपॉइंट, एचटीटीपी एचटीटीपी सर्वर की तरह काम नहीं करता है. इसकी मदद से, एन्कोडर से भेजे जाने वाले PUT तरीके के कॉल रिकॉर्ड किए जाते हैं.

  • डैश एंडपॉइंट से, एक साथ चलने वाले टीसीपी कनेक्शन पर काम किया जा सकता है. कनेक्शन को एचटीटीपी/1.1 के मुताबिक इस्तेमाल किया जा सकता है.
  • एमपीडी और इनीशियलाइज़ेशन सेगमेंट, पहले मीडिया सेगमेंट से तीन सेकंड के अंदर पीयूटी होने चाहिए. (हमारा सुझाव है कि आप MPD में इनिशियलाइज़ेशन सेगमेंट शामिल करें.)
  • हर सेगमेंट या एमपीडी के लिए, एक अलग पीयूटी अनुरोध का इस्तेमाल किया जाना चाहिए. कई सेगमेंट को कई हिस्सों में अपलोड करने की सुविधा मौजूद नहीं है.
  • मीडिया सेगमेंट के लिए PUT कार्रवाइयां, अपलोड बैंडविड्थ को बेहतर बनाने के लिए, समय के साथ ओवरलैप हो सकती हैं.
  • सेगमेंट, तीन सेकंड की समयसीमा के अंदर बिना क्रम में दिए जा सकते हैं.
  • MPD और शुरू करने के सेगमेंट को कम से कम हर 60 सेकंड में availabilityStartTime और startNumber के साथ अपडेट करना चाहिए. (जैसा कि ऊपर बताया गया है, इनीशियलाइज़ेशन सेगमेंट को MPD में शामिल किया जा सकता है. ऐसी स्थिति में, एक PUT अनुरोध दोनों सेगमेंट को अपडेट कर सकता है.)

यूआरएल का स्ट्रक्चर

आपके एन्कोडर को PUT यूआरएल बनाना होगा. इसके लिए, आपको YouTube एंडपॉइंट के बेस यूआरएल में एक स्ट्रिंग जोड़नी होगी. आपको YouTube लाइव स्ट्रीमिंग एपीआई का इस्तेमाल करके, डेटा डालने के लिए डैश बनाना होगा.

बाद में एन्कोडर, YouTube लाइव स्ट्रीमिंग एपीआई की मदद से, एंडपॉइंट का बेस यूआरएल पा सकता है. अगर आपको एन्कोडर को मैन्युअल रूप से यूआरएल देना है, तो YouTube लाइव इवेंट के यूआई में भी बेस यूआरएल दिखेगा.

मूल यूआरएल में जोड़ी गई स्ट्रिंग में ASCII वर्णों का यह सेट शामिल हो सकता है:

  • लोअरकेस अक्षर: a-z
  • बड़े अक्षर: A-Z
  • अंक: 0-9
  • विशेष वर्ण: _ (अंडरस्कोर), - (हाइफ़न), . (पूर्णविराम)

MPD URL

ऊपर बताई गई ज़रूरी शर्तों के अलावा, एमपीडी यूआरएल के आखिर में .mpd होना चाहिए. इससे YouTube सर्वर, एमपीडी की पहचान आसानी से कर पाता है.सेगमेंट के दूसरे यूआरएल .mpd पर खत्म नहीं होने चाहिए.

शुरू करना और मीडिया सेगमेंट वाले यूआरएल

अगर डेटा ISO BMFF कंटेनर में है, तो शुरू करने वाले सेगमेंट का यूआरएल और मीडिया सेगमेंट के सभी यूआरएल, .mp4 के साथ खत्म होने चाहिए. अगर डेटा, WebM कंटेनर में है, तो .webm से खत्म होना चाहिए.

MPD सामग्री

एमपीडी पूरा होना चाहिए और डैश मानक के मुताबिक होना चाहिए. इसमें, इनमें से हर एक एलिमेंट का सटीक होना ज़रूरी है. यह सूची खास तौर से YouTube के लिए ज़रूरी चीज़ों की पहचान करती है. साथ ही, डैश मानक कुछ और ज़रूरी चीज़ों की पहचान कर सकता है. एलिमेंट को सिंटैक्स सिंटैक्स का इस्तेमाल करके दिखाया गया है. ये डैश मानक के मुताबिक हैं.

  • /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

एलिमेंट की वैल्यू के लिए, कृपया नीचे दी गई ज़रूरी शर्तें देखें:

  • <MPD> एलिमेंट के minimumUpdatePeriod एट्रिब्यूट की वैल्यू, 60 सेकंड (PT60S) के बराबर या उससे कम पर सेट होनी चाहिए.
  • <SegmentTemplate> एलिमेंट के media एट्रिब्यूट से यह पता चलता है कि मीडिया सेगमेंट के यूआरएल, $Number$ का इस्तेमाल करके जनरेट किए गए हैं. (startNumber एट्रिब्यूट उस नंबर की पहचान करता है जिसे पहले मीडिया सेगमेंट को असाइन किया जाएगा.)

शुरू करने वाले सेगमेंट की लंबाई

इनिशियलाइज़ेशन सेगमेंट का साइज़ 100 केबी से ज़्यादा नहीं होना चाहिए. (आम तौर पर, इनिशियलाइज़ेशन सेगमेंट उससे बहुत छोटा होता है.) अगर शुरुआती हिस्से को एमपीडी में शामिल किया जाता है, तो सेगमेंट वाला यूआरएल data: 100 केबी से ज़्यादा नहीं होना चाहिए.

एन्कोडर का आउटपुट

इनीशियलाइज़ेशन सेगमेंट और मीडिया सेगमेंट में, मल्टी-प्लेक्स्ड ISO BMFF या WebM फ़ाइल स्ट्रीम होनी चाहिए. इसमें क्लोज़्ड जीओपी (तस्वीरों के ग्रुप) की जानकारी होनी चाहिए.

  • जीओपी का साइज़ करीब दो सेकंड और आठ सेकंड से कम होना चाहिए.
  • मल्टीप्लेक्स स्ट्रीम में ऑडियो और वीडियो ट्रैक, दोनों शामिल होने चाहिए.

दूसरे सबसे सही तरीके

एन्क्रिप्ट (सुरक्षित) करने का तरीका

YouTube, एचटीटीपीएस के ज़रिए स्ट्रीम को एन्क्रिप्ट (सुरक्षित) करने की सुविधा देता है. हमारा सुझाव है कि आप इस सुविधा का इस्तेमाल करें.

एमपीडी में सेगमेंट शुरू करना

हर आरएफ़सी 2397 के हिसाब से, सीधे तौर पर एमपीडी में यूआरएल को शुरू करने वाला सेगमेंट दिखाया जा सकता है. यह आपके स्ट्रीम सेट अप को आसान बनाता है. साथ ही, इस प्रोसेस को शुरू करने वाला सेगमेंट, स्ट्रीम के बाकी हिस्सों से मेल नहीं खाने की संभावना कम कर देता है.

इस एलिमेंट के लिए XPath है:

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

टारगेट सेगमेंट अवधि

डेटा डालने की बेहतर परफ़ॉर्मेंस और थ्रूपुट और इंतज़ार के समय के बीच अच्छा तालमेल बनाने के लिए, आपके मीडिया सेगमेंट की लंबाई 1 से 5 सेकंड के बीच होनी चाहिए.हमारा सुझाव है कि आप इन दो एलिमेंट का इस्तेमाल करके, एमपीडी में उन सेगमेंट की टारगेट अवधि के बारे में बताएं:

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

उन एट्रिब्यूट के आधार पर तैयार किए गए कुल समय को, सेगमेंट की कुल अवधि के दो फ़ैक्टर के अंदर होना चाहिए या स्ट्रीमिंग परफ़ॉर्मेंस पर असर पड़ सकता है.

ध्यान दें कि डेटा डालने के लिए टारगेट की अवधि, YouTube के बनाए गए लाइव स्ट्रीम के हिस्से की अवधि के बराबर नहीं होती. YouTube इनपुट को ट्रांसकोड करता है और उसे अलग-अलग हिस्सों में बांटता है. आउटपुट टारगेट का समय इस बात पर निर्भर करता है कि किसी स्ट्रीम को स्ट्रीमिंग की क्वालिटी के लिए ऑप्टिमाइज़ किया गया है या इंतज़ार के समय के लिए.

फिर से कोशिश करने और एक्सपोनेन्शियल बैकऑफ़

एचटीटीपी पीयूटी के सभी अनुरोधों का समय खत्म होना चाहिए. हमारा सुझाव है कि इन्हें सेगमेंट की अवधि से 500 मिलीसेकंड ज़्यादा रखें.

टाइम आउट या दूसरी गड़बड़ियों की वजह से पूरा न हो पाने वाला मीडिया सेगमेंट PUT अनुरोध, वीडियो स्ट्रीम में अंतर को दिखाता है. इसलिए, आपको किसी भी रैंडम बाइनरी एक्स्पोनेंशियल बैकऑफ़ का इस्तेमाल करके, फिर से अनुरोध करना होगा.

  1. अनुरोध स्वीकार न होने पर, [0 ... 100] मिलीसेकंड के बीच कोई तय समय इंतज़ार करें और फिर से अनुरोध करें.
  2. अगर अनुरोध फिर से पूरा नहीं होता है, तो [0 ... 200] मिलीसेकंड के बीच किसी भी क्रम में इंतज़ार करें और दोबारा कोशिश करें.
  3. अगर अनुरोध फिर से पूरा नहीं होता है, तो [0 ... 400] मिलीसेकंड के बीच किसी भी क्रम में इंतज़ार करें और दोबारा कोशिश करें.
  4. वगैरह.

ध्यान दें कि बार-बार होने वाली फ़ेलकरियों का संकेत एन्कोडर ऑपरेटर को मिलता है, क्योंकि ये फ़ेल हो रहे ब्रॉडकास्ट से जुड़े होते हैं.

एचटीटीपी रिस्पॉन्स कोड

नीचे दिए गए सेक्शन में उन रिस्पॉन्स कोड के बारे में बताया गया है जो YouTube, डैश से डिलीवर किए गए सेगमेंट के जवाब में दिखाता है.

200 (ठीक)

एचटीटीपी 200 (OK) का मतलब है कि YouTube सर्वर को सही से काम करने की ज़रूरत है.

202 (स्वीकृत)

किसी PUT या POST कार्रवाई का कोई एचटीटीपी 202 (स्वीकार किया गया) रिस्पॉन्स दिखाता है कि कार्रवाई सही नहीं थी और स्थगित प्रोसेसिंग के लिए स्वीकार कर लिया गया. हालांकि, बाद में होने वाली कार्रवाई सफल या असफल हो सकती है, इसलिए इस बात की गारंटी नहीं दी जा सकती कि YouTube वाकई इसमें कार्रवाई कर पाएगा.

ऐसा अक्सर तब होता है, जब किसी सेगमेंट को क्रम से नहीं डिलीवर किया जाता. आम तौर पर, पिछले सेगमेंट मिलने के बाद YouTube, स्वीकार किए गए सेगमेंट को सही तरीके से प्रोसेस कर सकता है. साथ ही, आपको सेगमेंट को फिर से भेजने की ज़रूरत नहीं होती.

उदाहरण के लिए, YouTube इनमें से किसी भी स्थिति में 202 जवाब दिखा सकता है:

  • MPD से पहले इनिशियलाइज़ेशन सेगमेंट मिलता है.
  • मीडिया सेगमेंट, एमपीडी और इनीशियलाइज़ेशन सेगमेंट से पहले मिलते हैं.
  • मीडिया सेगमेंट पहले के किसी सेगमेंट से पहले मिलता है, जैसे कि सेगमेंट 3 को सेगमेंट 2 से पहले मिल रहा है.

हालांकि, 202 रिस्पॉन्स यह भी बता सकता है कि आइटम आइडेंटिफ़ायर गलत है. ऐसा तब होता है, जब YouTube, POST या PUT अनुरोध मिलने पर, आइडेंटिफ़ायर की पूरी तरह से पुष्टि नहीं कर सकता. उदाहरण के लिए, ऐसा तब होता है जब एमपीडी मिलने से पहले, YouTube को एक इनीशियलाइज़ेशन सेगमेंट मिलता है और उसे स्वीकार कर लिया जाता है. हालांकि, यह प्रोसेस अमान्य होती है. इस मामले में YouTube, सेगमेंट को चालू करने की प्रोसेस को स्वीकार करता है और 202 दिखाता है. इसके बाद, यह तय करता है कि वीडियो का फ़ॉर्मैट MPD मिलने पर मान्य है या नहीं. इस तरह के मामले से बचने के लिए, एमपीडी की शुरुआत का हिस्सा शामिल करें.

400 (गलत अनुरोध)

कोई HTTP 400 (खराब अनुरोध) जवाब इनमें से किसी एक समस्या के बारे में बताता है:

  • यह यूआरएल कुनिर्मित है
  • पोस्ट बहुत बड़ी है (> 10MB)
  • MPD को पार्स नहीं किया जा सकता
  • एमपीडी में, इनिशियलाइज़ेशन सेगमेंट खराब है

401 (बिना अनुमति के)

कोई एचटीटीपी 401 (बिना अनुमति वाला) रिस्पॉन्स दिखाता है कि YouTube डैश एंडपॉइंट का बेस यूआरएल खराब है या उसकी समयसीमा खत्म हो गई है.

405 (तरीका स्वीकार नहीं है)

कोई एचटीटीपी 405 (तरीका स्वीकार नहीं किया गया) जवाब यह बताता है कि POST या PUT के अलावा कोई दूसरा अनुरोध भेजा गया था.

409 (विरोधाभास)

किसी PUT या POST कार्रवाई का एचटीटीपी 409 (विरोधी) जवाब यह बताता है कि YouTube अनुरोध को प्रोसेस नहीं कर सकता. उदाहरण के लिए, यह अनुरोध तब हो सकता है, जब अनुरोध करने वाले व्यक्ति ने कई मीडिया सेगमेंट भेजे हों, लेकिन YouTube के पास अब भी एमपीडी, इनीशियलाइज़ेशन सेगमेंट या दोनों नहीं हैं. ऐसे में, एन्कोडर को फ़ेल हो चुके अनुरोध को फिर से आज़माने से पहले, एमपीडी और इनीशियलाइज़ेशन सेगमेंट को फिर से ट्रांसमिट करना होगा.

500 (आंतरिक सर्वर गड़बड़ी)

एक HTTP 500 (आंतरिक सर्वर गड़बड़ी) जवाब यह बताता है कि सर्वर अनुरोध को प्रोसेस नहीं कर सका. इस गड़बड़ी के लिए, हम सुझाव देते हैं कि आप एक्स्पोनेंशियल बैकऑफ़ के साथ अनुरोध फिर से करने की कोशिश करें.

उदाहरण

यूआरएल का क्रम

नीचे दिए गए यूआरएल क्रम में PUT अनुरोधों की एक सीरीज़ दिखाई गई है जो DASH के ज़रिए कॉन्टेंट डिलीवर करने के लिए किए जाएंगे. इस क्रम में माना जाता है कि YouTube डैश एंडपॉइंट का मूल यूआरएल यह है:

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

क्रम में, भेजे गए एमपीडी और इनीशियलाइज़ेशन सेगमेंट अलग-अलग दिखते हैं. हालांकि, इनीशियलाइज़ेशन सेगमेंट को सीधे एमपीडी में दिखाया जा सकता है. यह तरीका अपनाने का सुझाव दिया जाता है. इसके अलावा, MPD और शुरू करने के सेगमेंट को कम से कम हर 60 सेकंड में अपडेट करना चाहिए. इस तरह, उन सेगमेंट के यूआरएल, इस क्रम में फिर से आएंगे. इसके बाद, ज़्यादा मीडिया सेगमेंट के लिए यूआरएल दिखेंगे.

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 में, आरएफ़सी 2397 के डेटा यूआरएल में एम्बेड किया गया इनीशियलाइज़ेशन सेगमेंट है. हमारा सुझाव है कि शुरू करने के सेगमेंट को अलग से भेजने के बजाय, उन्हें इस तरह जोड़ें.

यह उदाहरण, 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="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, जिसमें शुरू करने का कोई सेगमेंट एम्बेड नहीं किया गया है, वह YouTube में WebM (VP8 या VP9, Opus) डेटा डालने के हिसाब से भी है:

<?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 बीएमएफ़एफ़ सेगमेंट

एम्बेड किए गए इनीशियलाइज़ेशन सेगमेंट के साथ MPD

नीचे दिए गए सैंपल MPD में, आरएफ़सी 2397 के डेटा यूआरएल में एम्बेड किया गया इनीशियलाइज़ेशन सेगमेंट है. हमारा सुझाव है कि शुरू करने के सेगमेंट को अलग से भेजने के बजाय, उन्हें इस तरह जोड़ें.

यह उदाहरण, ISO BMFF (H.264, AAC) का डेटा डालने के लिए ज़रूरी है. ज़्यादातर डेटा यूआरएल को पढ़ने लायक नहीं बनाया गया है:

<?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, जिसमें एम्बेड किया गया इनीशियलाइज़ेशन सेगमेंट नहीं है, यह YouTube को ISO BMFF (H.264, AAC) डेटा डालने के मुताबिक भी है:

<?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 और डैश डेटा डालने की सुविधा

YouTube पर आरटीएमपी और डैश डेटा, दोनों को एक साथ नहीं जोड़ा जा सकता.यह नियम ब्रॉडकास्ट के दौरान, दोनों के बीच स्विच करने के साथ-साथ डेटा डालने के मुख्य तरीके के तौर पर काम करने और बैकअप के डेटा का बैक अप लेने के लिए लागू होता है.