كيف سرّعنا ترميز الفيديو ثماني مرات

كيف سرّعنا ترميز الفيديو ثماني مرات

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

اسمي عسكر كمالوف، قبل عام انضممت إلى فريق تكنولوجيا الفيديو ياندكس. اليوم سأخبر قراء حبر بإيجاز كيف تمكنا من خلال موازنة عملية الترميز من تسريع عملية تسليم الفيديو إلى المستخدم بشكل كبير.

ستكون هذه المشاركة في المقام الأول موضع اهتمام أولئك الذين لم يفكروا من قبل فيما يحدث تحت غطاء خدمات الفيديو. في التعليقات يمكنك طرح الأسئلة واقتراح مواضيع للمشاركات المستقبلية.

بضع كلمات عن المهمة نفسها. لا يساعدك Yandex في البحث عن مقاطع الفيديو على المواقع الأخرى فحسب، بل يقوم أيضًا بتخزين مقاطع الفيديو لخدماته الخاصة. سواء كان برنامجًا أصليًا أو مباراة رياضية على الهواء، أو فيلمًا على KinoPoisk أو مقاطع فيديو على Zen وNews - يتم تحميل كل هذا على خوادمنا. لكي يتمكن المستخدمون من مشاهدة الفيديو، يجب إعداده: تحويله إلى التنسيق المطلوب، أو إنشاء معاينة، أو حتى تشغيله عبر التكنولوجيا ديب اتش دي. الملف غير المجهز يشغل مساحة فقط. علاوة على ذلك، نحن لا نتحدث فقط عن الاستخدام الأمثل للأجهزة، ولكن أيضًا عن سرعة تسليم المحتوى للمستخدمين. مثال: يمكن البحث عن تسجيل للحظة الحاسمة في مباراة هوكي خلال دقيقة واحدة بعد وقوع الحدث نفسه.

الترميز المتسلسل

لذا، فإن سعادة المستخدم تعتمد إلى حد كبير على مدى سرعة توفر الفيديو. ويتم تحديد ذلك بشكل أساسي من خلال سرعة تحويل الشفرة. عندما لا تكون هناك متطلبات صارمة لسرعة تحميل الفيديو، فلا توجد مشاكل. يمكنك أخذ ملف واحد غير قابل للتجزئة، وتحويله، وتحميله. في بداية رحلتنا، هكذا عملنا:

كيف سرّعنا ترميز الفيديو ثماني مرات

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

ترميز متسلسل مع نتيجة وسيطة

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

فمن ناحية، أصبح الفيديو متاحًا بشكل أسرع. وهو مفيد للأحداث المهمة. لكن في المقابل، تظهر الصورة ضبابية، وهذا يزعج المشاهدين.

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

الترميز الموازي

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

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

لذلك، في البنية الجديدة، قمنا بتقسيم كتلة العامل المتجانسة ذات الترميز المتسلسل إلى قطاع الخدمات الصغيرة، وTcoder، وCombiner.

كيف سرّعنا ترميز الفيديو ثماني مرات

  1. يقوم Segmenter بتقسيم الفيديو إلى أجزاء مدتها 10 ثوانٍ تقريبًا. تتكون الأجزاء من واحد أو أكثر من GOPs (مجموعة من الصور). تكون كل مجموعة GOP مستقلة ومشفرة بشكل منفصل بحيث يمكن فك تشفيرها دون الرجوع إلى الإطارات من GOPs الأخرى. أي أنه يمكن تشغيل الأجزاء بشكل مستقل عن بعضها البعض. يؤدي هذا التقسيم إلى تقليل زمن الوصول، مما يسمح ببدء المعالجة مبكرًا.
  2. يقوم Tcoder بمعالجة كل جزء. يأخذ مهمة من قائمة الانتظار، ويقوم بتنزيل جزء من وحدة التخزين، وترميزه إلى درجات دقة مختلفة (تذكر أنه يمكن للاعب اختيار إصدار بناءً على سرعة الاتصال)، ثم يعيد النتيجة إلى وحدة التخزين ويضع علامة على الجزء على أنه تمت معالجته في قاعدة البيانات. بعد معالجة جميع الأجزاء، يرسل Tcoder مهمة إنشاء نتائج للمكون التالي.
  3. يجمع برنامج Combiner النتائج معًا: يقوم بتنزيل جميع الأجزاء التي تم إنشاؤها بواسطة Tcoder، ويولد تدفقات لدرجات دقة مختلفة.

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

النتائج

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

وهناك شيئ اخر. مع النهج القديم، إما لم يكن هناك ما يكفي من الخوادم، أو أنها كانت خاملة دون مهام. يتيح لك الترميز الموازي زيادة حصة إعادة تدوير الحديد. الآن مجموعتنا التي تضم أكثر من ألف خادم مشغولة دائمًا بشيء ما.

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

اكتب في التعليقات المهام في مجال العمل مع الفيديو التي ترغب في القراءة عنها.

روابط مفيدة لتجربة زملاء الصناعة

المصدر: www.habr.com

إضافة تعليق