تقديم محتوى مباشر على YouTube عبر DASH

يقدّم هذا المستند إرشادات حول كيفية استخدام تنسيق التسليم عبر 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.
  • يجب أن تكون أقسام MPD والتهيئة في وضع PUT خلال 3 ثوانٍ من شريحة الوسائط الأولى. (ننصحك بتضمين شريحة التهيئة في MPD.)
  • يجب أن تستخدم كل شريحة أو MPD طلب PUT منفصلاً؛ حيث إن التحميل المتعدد الأجزاء لأجزاء متعددة غير معتمد.
  • قد تتداخل عمليات PUT لشرائح الوسائط في الوقت المناسب لتحسين النطاق الترددي للتحميل.
  • يمكن تقديم الشرائح بترتيب غير متتابع خلال فترة زمنية تبلغ 3 ثوانٍ تقريبًا.
  • يجب تعديل أقسام MPD والتهيئة كل 60 ثانية على الأقل باستخدام availabilityStartTime وstartNumber المعدَّلَين. (كما ذكرنا أعلاه، يمكن تضمين شريحة التهيئة في تنسيق MPD. في هذه الحالة، يمكن لطلب PUT واحد تحديث الجزأين).

بنية عنوان URL

يجب أن ينشئ برنامج الترميز عناوين URL PUT من خلال إلحاق سلسلة إلى عنوان URL الأساسي لنقطة نهاية YouTube. يجب إنشاء نقطة نهاية عرض DASH باستخدام واجهة برمجة تطبيقات البث المباشر في YouTube.

ويمكن لبرنامج الترميز الحصول على عنوان URL الأساسي لنقطة النهاية بشكل آلي عبر واجهة برمجة تطبيقات البث المباشر في YouTube. يظهر عنوان URL الأساسي أيضًا في واجهة مستخدم الأحداث المباشرة من YouTube إذا كنت تريد تقديم عنوان URL إلى برنامج التشفير يدويًا.

يمكن أن تحتوي السلسلة الملحقة بعنوان URL الأساسي على المجموعة التالية من أحرف ASCII:

  • الأحرف الصغيرة: a-z
  • الأحرف الكبيرة: A-Z
  • الأرقام: 0-9
  • الرموز الخاصة: _ (شرطة سفلية)، - (واصلة)، . (نقطة)

عناوين URL لـ MPD

بالإضافة إلى المتطلبات المذكورة أعلاه، يجب أن ينتهي عنوان URL بتنسيق MPD بـ .mpd، مما يمكّن خادم YouTube من تحديد MPD بسهولة.ويجب ألا تنتهي عناوين URL الأخرى للشريحة بـ .mpd.

عناوين URL للتهيئة وشرائح الوسائط

يجب أن ينتهي عنوان URL لشريحة الإعداد وجميع عناوين URL لشرائح الوسائط بـ .mp4 إذا كانت البيانات في حاوية ISO BMFF أو .webm إذا كانت البيانات في حاوية WebM.

محتوى MPD

يجب أن يكون 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

يُرجى ملاحظة المتطلبات التالية لقيم العناصر:

  • يجب ضبط السمة minimumUpdatePeriod الخاصة بالعنصر <MPD> على قيمة تساوي 60 ثانية أو أقل (PT60S).
  • يجب أن تحدّد السمة media للعنصر <SegmentTemplate> أنه يتم إنشاء عناوين URL لشرائح الوسائط باستخدام $Number$. (تحدّد السمة startNumber الرقم الذي سيتم تحديده للشريحة الأولى من الوسائط).

طول جزء التهيئة

يجب ألا يكون جزء التهيئة أكبر من 100 كيلوبايت. (عادةً ما تكون شريحة الإعداد أصغر من ذلك بكثير). إذا تم تضمين شريحة التهيئة في MPD، يجب ألا يتجاوز عنوان URL لـ data: الذي يحتوي على الشريحة 100 كيلوبايت.

إخراج برنامج التشفير

يجب أن تشكّل شريحة التهيئة وشرائح الوسائط مصدرًا متعددًا لمضاعفة ISO BMFF أو WebM مع مجموعة GOPs مغلقة (مجموعات من الصور).

  • يجب أن يكون حجم مجموعة الصور "GOP" ثانيتَين تقريبًا ويجب أن يكون أقل من 8 ثوانٍ.
  • يجب أن يحتوي البث المتعدد على مقاطع صوتية ومقاطع فيديو.

أفضل الممارسات الإضافية

التشفير

يتيح YouTube تشفير البث عبر HTTPS. ونحن ننصح بشدة باستخدام هذه الميزة.

شرائح التهيئة بتنسيق MPD

يمكنك تمثيل شريحة "التهيئة" مباشرةً في MPD باستخدام عنوان URL لـ data:، بموجب RFC 2397. يعمل ذلك على تبسيط إعداد البث وتقليل احتمال عدم توافق شريحة "الإعداد" مع بقية البث.

إن XPath الخاص بهذا العنصر هو:

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

مدد الشرائح المستهدفة

للحصول على أداء عرض جيد ومفاضلة جيدة بين سرعة الاستجابة ووقت الاستجابة، يجب أن يتراوح طول أجزاء الوسائط بين ثانية واحدة و5 ثوانٍ.وننصح بشدة بتحديد المدة المستهدفة لهذه الشرائح في MPD باستخدام هذين العنصرين:

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

يجب أن تكون المدة المحسوبة من هذه السمات في حدود 2 من جميع مُدد الشرائح الفعلية أو قد يتأثر أداء البث.

تجدر الإشارة إلى أن المدة المستهدفة لعملية العرض لا تساوي مدة المجموعة للبث المباشر الذي ينشئه YouTube. يحوّل YouTube ترميز الإدخال ويعيد توزيعه، وتعتمد مدة استهداف الإخراج على ما إذا تم تحسين البث لجودة البث أم لوقت الاستجابة.

عمليات إعادة المحاولة والتراجع الأسي

يجب تنفيذ جميع طلبات HTTP PUT باستخدام مهلة، ونحن نوصي بإعداد قيمة أكبر من مدة الشريحة بمقدار 500 مللي ثانية.

إنّ طلب PUT لشريحة الوسائط يتعذّر تنفيذه، سواء بسبب انتهاء المهلة أو الأخطاء الأخرى، ويتوافق مع فجوة في الفيديو المضمّن. بناءً على ذلك، يجب إعادة محاولة تنفيذ أي من هذه الطلبات باستخدام التراجع الأسي الثنائي بشكل عشوائي:

  1. بعد الإخفاق، انتظِر فترة عشوائية بين [0 ... 100] مللي ثانية وأعِد محاولة الطلب.
  2. إذا تعذّر الطلب مرة أخرى، انتظِر فترة عشوائية بين [0 ... 200] مللي ثانية وأعِد محاولة الطلب.
  3. إذا تعذّر الطلب مرة أخرى، انتظِر فترة عشوائية بين [0 ... 400] مللي ثانية وأعِد محاولة الطلب.
  4. إلخ

تجدر الإشارة إلى أن حالات الإخفاق المتكررة يجب إرسالها إلى عامل تشغيل برنامج التشفير لأنها تتوافق مع البث الذي يخفق.

رموز استجابة HTTP

توضح الأقسام التالية رموز الاستجابة التي يعرضها YouTube استجابةً للمقاطع التي تم تسليمها عبر DASH.

200 (موافق)

تشير استجابة HTTP 200 (OK) إلى أن خادم YouTube قد تلقى عملية متوقعة وتعامل معها بنجاح.

202 (تم القبول)

تشير استجابة HTTP 202 (مقبولة) لأي عملية PUT أو POST إلى أن العملية كانت غير متوقعة ومقبولة للمعالجة المؤجلة. ومع ذلك، قد تنجح العملية المؤجلة أو يتعذّر إتمامها، لذا لا تضمن الاستجابة أن يتمكن YouTube فعليًا من معالجة العملية بنجاح.

غالبًا ما تحدث هذه الاستجابة عندما يتم تقديم شريحة بطريقة غير متسلسلة. عادةً، يمكن لـ YouTube معالجة المقطع المقبول بشكل صحيح بعد تلقي الشرائح السابقة، ولا يلزمك إعادة إرسال المقطع.

على سبيل المثال، يمكن لموقع YouTube عرض الاستجابة 202 في أي من الحالات التالية:

  • يتم تلقي جزء تهيئة قبل MPD.
  • يتم تلقّي شرائح الوسائط قبل الشريحتين MPD والتهيئة.
  • يتم تلقي شريحة من الوسائط قبل شريحة سابقة، مثل الشريحة الثالثة التي يتم تلقيها قبل الشريحة 2.

ومع ذلك، يمكن أن تشير الاستجابة 202 أيضًا إلى أن معرّف العنصر غير صحيح إذا تعذر على YouTube التحقق من صحة المعرف بالكامل عند استلام طلب POST أو PUT. على سبيل المثال، من بين الحالات التي تحدث فيها هذه المشكلة عندما يتلقى YouTube جزء تهيئة ويقبله قبل استلام ملف MPD، ولكن يتضح أن جزء التهيئة غير صالح. في هذه الحالة، يقبل YouTube شريحة التهيئة ويعرض 202، ثم يحدد ما إذا كانت الشريحة صالحة عند استلام MPD. يمكنك تجنُّب هذا السيناريو تحديدًا من خلال تضمين شريحة التهيئة في MPD.

400 (طلب غير صالح)

تشير استجابة HTTP 400 (طلب غير صحيح) إلى حدوث إحدى المشكلات التالية:

  • عنوان URL غير صحيح
  • حجم المشاركة أكبر من اللازم (> 10 ميغابايت)
  • لا يمكن تحليل MPD.
  • شريحة التهيئة في MPD تالفة

401 (غير مصرح به)

تشير استجابة HTTP 401 (غير مصرح بها) إلى أن عنوان URL الأساسي لنقطة نهاية YouTube DASH تالف أو منتهية الصلاحية.

405 (الطريقة غير مسموح بها)

تشير استجابة HTTP 405 (الطريقة غير مسموح بها) إلى أنه تم إرسال طلب بخلاف POST أو PUT.

409 (تعارض)

تشير استجابة HTTP 409 (تعارض) لأي عملية PUT أو POST إلى أن YouTube لا يمكنه معالجة الطلب. على سبيل المثال، قد تحدث هذه الاستجابة إذا أرسل مقدِّم الطلب العديد من شرائح الوسائط، ولكن لم يتم تضمين MPD أو شريحة التهيئة أو كليهما في YouTube. وفي هذا المثال، سيحتاج برنامج الترميز إلى إعادة إرسال مقطعَي MPD و"الإعداد" قبل إعادة محاولة الطلب الذي تعذّر تنفيذه.

500 (خطأ داخلي في الخادم)

تشير استجابة HTTP 500 (خطأ داخلي في الخادم) إلى أنه تعذر على الخادم معالجة الطلب. بالنسبة إلى هذا الخطأ، ننصحك بإعادة محاولة الطلب باستخدام التراجع الأسي.

أمثلة

تسلسل عنوان URL

يعرض تسلسل عناوين URL أدناه سلسلة من طلبات PUT التي سيتم تقديمها لعرض المحتوى عبر DASH. يفترض التسلسل أن عنوان URL الأساسي لنقطة نهاية YouTube DASH هو:

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>

الإعداد

يوضّح الرسم البياني التالي تنسيقًا لنموذج شريحة مضاعفة BMFF ISO متعددة. لا يستخدم YouTube بالضرورة الذرات، ولكن هذا مثال مطابق. ويتم تمثيل كل من المقاطع الصوتية ومقاطع الفيديو على وجه الخصوص.

الوسائط

يوضّح الرسم البياني التالي تخطيطًا لنموذج شريحة وسائط متعددة بتنسيق ISO BMFF. ليس YouTube بالضرورة يستخدم كل الذرات، ولكن هذا مثال مطابق. ويتم تمثيل كل من المقاطع الصوتية ومقاطع الفيديو على وجه الخصوص. يمكن إلحاق سلسلة من هذه الشرائح بجزء تهيئة لإنتاج تدفق ISO BMFF صالح وكامل ومضاعف.

القيود المعروفة

عمليات عرض بروتوكول RTMP وDASH

لا يمكن الجمع بين عرض RTMP وDASH وYouTube.وينطبق ذلك على التبديل بين الاثنين أثناء البث بالإضافة إلى استخدام إحداهما كطريقة العرض الأساسية والأخرى للعرض الاحتياطي.