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

इस दस्तावेज़ में, डाइनैमिक अडैप्टिव स्ट्रीमिंग ओवर एचटीटीपी (DASH) डिलीवरी फ़ॉर्मैट का इस्तेमाल करने से जुड़े दिशा-निर्देश दिए गए हैं. इससे, एन्कोडर से YouTube पर लाइव डेटा स्ट्रीम किया जा सकता है. इसका मकसद, एन्कोडर वेंडर को उनके प्रॉडक्ट में DASH डिलीवरी की सुविधा जोड़ने में मदद करना है.

DASH को समझना

नीचे दी गई सूची में DASH की कुछ मुख्य सुविधाओं और एट्रिब्यूट की जानकारी दी गई है:

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

विशेषताएं

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

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

समस्या शुरू होने का समय

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

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

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

आपके एन्कोडर को YouTube एंडपॉइंट बेस यूआरएल में एक स्ट्रिंग जोड़कर, यूआरएल को डालना होगा. आपको YouTube Live Streaming API का इस्तेमाल करके, DASH में डेटा डालने का एंडपॉइंट बनाना होगा.

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

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

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

एमपीडी यूआरएल

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

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

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

एमपीडी कॉन्टेंट

एमपीडी पूरी होनी चाहिए और डैश के मानक के मुताबिक होना चाहिए. इसमें नीचे दिए गए हर एलिमेंट में से कोई एक एलिमेंट शामिल होना चाहिए. इस सूची में उन एलिमेंट की पहचान की जाती है जिन्हें खास तौर पर YouTube के लिए ज़रूरी होता है. ऐसे में, DASH स्टैंडर्ड दूसरे ज़रूरी एलिमेंट की पहचान कर सकता है. एलिमेंट दिखाने के लिए, डेटा फ़ाइल बनाई गई है. इसके लिए, एलिमेंट को डिफ़ॉल्ट सिंटैक्स का इस्तेमाल किया गया है. ये एलिमेंट 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

कृपया एलिमेंट वैल्यू के लिए इन ज़रूरी शर्तों को ध्यान में रखें:

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

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

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

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

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

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

सबसे सही अन्य तरीके

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

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

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

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

इस एलिमेंट का X पाथ यह है:

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

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

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

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

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

ध्यान दें कि बार-बार गड़बड़ी होने का सिग्नल एन्कोडर ऑपरेटर को देना चाहिए, क्योंकि ऐसा ब्रॉडकास्ट न होने पर होता है.

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

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

200 (ठीक)

एचटीटीपी 200 (OK) रिस्पॉन्स से पता चलता है कि YouTube सर्वर को उम्मीद के मुताबिक कार्रवाई मिली और इसे ठीक से मैनेज किया गया.

202 (स्वीकृत)

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

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

उदाहरण के लिए, YouTube नीचे दिए गए किसी भी मामले में 202 रिस्पॉन्स दिखा सकता है:

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

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

400 (खराब अनुरोध)

एचटीटीपी 400 (खराब अनुरोध) रिस्पॉन्स से पता चलता है कि नीचे दी गई समस्याओं में से कोई एक समस्या हुई है:

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

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

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

405 (तरीका की अनुमति नहीं है)

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

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

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

500 (सर्वर में गड़बड़ी)

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

उदाहरण

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

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

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

इस क्रम में, एमपीडी और प्रोसेस शुरू करने वाले सेगमेंट को अलग-अलग दिखाया गया है. हालांकि, शुरुआती सेगमेंट को सीधे एमपीडी में दिखाया जा सकता है. हमारा सुझाव है कि यह तरीका इस्तेमाल करें. इसके अलावा, एमपीडी और प्रोसेस शुरू करने वाले सेगमेंट को कम से कम हर 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 सेगमेंट

एम्बेड किए गए शुरुआती सेगमेंट के साथ एमपीडी

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

यह उदाहरण, 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="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 का सैंपल, जिसमें एम्बेड किया गया शुरुआती सेगमेंट नहीं है, 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 क्लस्टर होता है. आईएसओ बीएमएफ़एफ़ स्ट्रीम की तरह ही, क्लस्टर की सीरीज़ से पहले शुरू करने वाले सेगमेंट को एक मान्य WebM स्ट्रीम बनानी चाहिए.

ISO बीएमएफ़एफ़ सेगमेंट

एम्बेड किए गए शुरुआती सेगमेंट के साथ एमपीडी

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

यह उदाहरण, 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"
    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 बीएमएफ़ (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 बीएमएफ़एफ़ इनिशलाइज़ेशन सेगमेंट के सैंपल का लेआउट दिखाता है. ऐसा ज़रूरी नहीं है कि YouTube ऐटम का इस्तेमाल करे, लेकिन यह एक बेहतर उदाहरण है. खास तौर पर, ऑडियो और वीडियो ट्रैक, दोनों दिखाए जाते हैं.

मीडिया

नीचे दिया गया डायग्राम, मल्टीप्लेक्स किए गए ISO बीएमएफ़एफ़ मीडिया सेगमेंट के सैंपल का लेआउट दिखाता है. ऐसा ज़रूरी नहीं है कि YouTube सभी ऐटम का इस्तेमाल करे, लेकिन यह एक बेहतर उदाहरण है. खास तौर पर, ऑडियो और वीडियो ट्रैक, दोनों दिखाए जाते हैं. इन सेगमेंट की सीरीज़ को किसी प्रोसेस शुरू करने वाले सेगमेंट में जोड़ा जा सकता है, ताकि एक मान्य और पूरी मल्टीप्लेक्सिंग ISO बीएमएफ़एफ़ स्ट्रीम बनाई जा सके.

पहले से मालूम सीमाएं

आरटीएमपी और डैश डेटा डालना

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