إرسال محتوى مباشر على YouTube عبر DASH

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

بنية عنوان URL

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

وبالتالي، سيتمكّن برنامج الترميز من الحصول على عنوان URL الأساسي لنقطة النهاية بشكل آلي عبر YouTube Live Streaming API. ويظهر عنوان 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 متعدد الإرسال مع مجموعات من الصور (GOP) مغلقة.

  • يجب أن يكون حجم مجموعة الصور (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 (OK)

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

202 (تم القبول)

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

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

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

  • يتم تلقّي جزء الإعداد قبل MPD.
  • يتم تلقّي شرائح الوسائط قبل قطاعات "MPD" و"الإعداد".
  • يتم تلقي شريحة وسائط قبل مقطع سابق، مثلاً يتم استلام المقطع 3 قبل المقطع 2.

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

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

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

  • عنوان URL غير صالح.
  • حجم المشاركة كبير جدًا (> 10 ميغابايت).
  • يتعذّر تحليل ملف MPD.
  • مقطع الإعداد في MPD تالف.

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

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

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

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

409 (تعارض)

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

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

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

أمثلة

تسلسل عناوين 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.وينطبق ذلك على التبديل بين الطريقتَين أثناء البث واستخدام طريقة عرض أساسية وطريقة عرض احتياطية.