إرسال محتوى مباشر على 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.

التوقيت

تعمل نقطة نهاية YouTube DASH كخادم 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 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 (حسنًا) إلى أنّ خادم YouTube تلقّى عملية متوقّعة وتعامل معها بنجاح.

202 (تم القبول)

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

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

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

  • يتم تلقّي مقطع تهيئة قبل ملف MPD.
  • يتم تلقّي مقاطع الوسائط قبل مقاطع MPD ومقاطع التهيئة.
  • يتم تلقّي جزء من الوسائط قبل جزء سابق، مثل تلقّي الجزء 3 قبل الجزء 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 (Method Not Allowed)

تشير استجابة HTTP 405 (Method Not Allowed) إلى أنّه تم إرسال طلب غير POST أو PUT.

409 (تعارض)

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

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

تشير الاستجابة HTTP 500 (Internal Server Error) إلى أنّ الخادم تعذّر عليه معالجة الطلب. بالنسبة إلى هذا الخطأ، ننصحك بإعادة محاولة إرسال الطلب باستخدام خوارزمية الرقود الأسي الثنائي.

أمثلة

تسلسل عناوين 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>

الإعداد

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

الوسائط

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

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

عمليات نقل بيانات RTMP وDASH

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