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

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

DASH के बारे में जानकारी

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

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

विशेषताएं

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

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

समय

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

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

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

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

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

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

  • अंग्रेज़ी के छोटे अक्षर: a-z
  • बड़े अक्षर: A-Z
  • अंक: 0-9
  • खास वर्ण: _ (अंडरस्कोर), - (हाइफ़न), . (फ़ुल स्टॉप)

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

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

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

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

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

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

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

शुरुआती सेगमेंट की लंबाई

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

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

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

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

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

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

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

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

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

इस एलिमेंट के लिए 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, DASH के ज़रिए डिलीवर किए गए सेगमेंट के जवाब में दिखाता है.

200 (OK)

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

202 (स्वीकृत)

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

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

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

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

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

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

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

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

401 (अनुमति नहीं है)

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

405 (इस एचटीटीपी मेथड से ऐक्सेस करने की अनुमति नहीं है)

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

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

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

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

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

उदाहरण

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

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

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

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

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

नीचे दिए गए सैंपल एमपीडी में, आरएफ़सी 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 स्ट्रीम जनरेट होनी चाहिए.

आईएसओ बीएमएफ़ सेगमेंट

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

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

यह उदाहरण, YouTube पर आईएसओ बीएमएफ़ (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

नीचे दिया गया 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>

डेटा लेयर में इवेंट बनाने की प्रोसेस

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

मीडिया

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

सीमाएं

आरटीएमपी और डैश इनजेस्ट

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