تحليل معمّق: VideoNG

Dale Curtis
Dale Curtis

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

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

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

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

رسم بياني لتدفق العرض إلى الأنظمة الأساسية المختلفة في Chromium

يمكن تقسيم عرض الفيديو إلى خطوتين: اختيار ما تقدمه وتقديم تلك المعلومات بكفاءة. ولحسن القراءة، سأتناول التسليم الفعال قبل التعمق في كيفية اختيار Chromium لما يقدمه.

بعض المصطلحات والتنسيق

نظرًا لأن هذه المقالة تركز على العرض، فسأتطرق بإيجاز إلى جوانب إزالة التشويش وفك الترميز في مسار التنفيذ.

وحدات البايت التي تتدفق إلى الداخل، والحزم المنظمة المتدفقة.

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

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

توفير وضع الحماية في Chromium للعارض ووحدة معالجة الرسومات وعمليات الصوت

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

الكثير من وحدات البت

يتطلب فهم مسارات عرض الفيديو في الوقت الحاضر معرفة ما يجعل الفيديو مميزًا، أي معدل نقل البيانات. عند التشغيل بدقة 3840×2160 (4K) بمعدّل 60 لقطة في الثانية، يتم استخدام نطاق ترددي للذاكرة يتراوح بين 9 و12 غيغابت/ثانية. على الرغم من أنّ الأنظمة الحديثة قد تبلغ ذروتها في معدل نقل البيانات بمئات الغيغابايت في الثانية، يمثّل تشغيل الفيديو جزءًا كبيرًا منه. يمكن أن يتضاعف إجمالي معدل نقل البيانات بسهولة بسبب النسخ أو الرحلات بين وحدة معالجة الرسومات ووحدة المعالجة المركزية (CPU).

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

صفحة ويب بها ثقب وسهم مكتوب عليه "الفيديو هنا".

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

صفحة ويب تحتوي على ثقب وسهم يحمل عبارة "الفيديو هنا"، وغلافه مربّع يمثل نظام التشغيل.

لكل نظام أساسي شكله الخاص من التراكبات التي تعمل معها واجهات برمجة التطبيقات لفك ترميز النظام الأساسي بالتوافق. يحتوي نظام التشغيل Windows على الإنشاء المباشر وعمليات تحويل Media Foundation، ويحتوي نظام التشغيل macOS على CoreAnimation Layers و VideoToolbox، ويحتوي Android على SurfaceView وMediaCodec، في حين يتضمّن Linux VASurfaces و VA-API. يتم التعامل مع تجريدات Chromium لهذه المفاهيم من خلال الواجهتين OverlayProcessor وmojo::VideoDecoder على التوالي.

في بعض الحالات، من الممكن أن تكون هذه المخازن الاحتياطية قابلة للتعيين في ذاكرة النظام، لذلك لا يلزم أن تكون معتمة ولا تستهلك أي معدل نقل بيانات حتى يتم الوصول إليها، ويسمي Chromium هذه الموارد GpuMemoryBuffers. وعلى نظام التشغيل Windows، تكون المخازن المؤقتة DXGI وعلى أجهزة macOS IOSurfaces و"AHardwareBuffers" للأجهزة التي تعمل بنظام التشغيل Android والمخازن المؤقتة لنظام الأسواق الرقمية (DMA) في نظام التشغيل Linux. لا يحتاج تشغيل الفيديو بشكل عام إلى هذا المستوى من الوصول، إلا أنّ هذه الموارد الاحتياطية مهمة لالتقاط الفيديو من أجل ضمان أدنى معدل نقل بيانات بين جهاز الالتقاط وبرامج الترميز النهائية.

رسم تخطيطي للموارد الاحتياطية المذكورة في النص السابق

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

كلما استفدنا أكثر من الميزات الأساسية لنظام التشغيل مثل التراكبات والمخازن المؤقتة لوحدة معالجة الرسومات، قلّ معدّل نقل البيانات الذي يتم استهلاكه في الترتيب العشوائي لوحدات البايت الخاصة بالفيديوهات بدون داعٍ. يمكن أن يؤدي الاحتفاظ بجميع البيانات في مكان واحد، بدءًا من فك الترميز وصولاً إلى العرض إلى توفير طاقة مذهلة. على سبيل المثال، عندما فعّل Chromium العناصر المركّبة على نظام التشغيل macOS، انخفض استهلاك الطاقة أثناء تشغيل الفيديو بملء الشاشة إلى النصف. على أنظمة أساسية أخرى مثل Windows وAndroid وChromeOS، يمكننا استخدام العناصر المركّبة حتى في الحالات التي لا تكون بملء الشاشة، ما يؤدي إلى توفير ما يصل إلى 50% تقريبًا من جميع الأجهزة.

العرض

الآن بعد أن تناولنا آليات التسليم المثلى، يمكننا مناقشة كيفية اختيار Chromium لما يقدمه. تستخدم حزمة تشغيل Chromium بنية مستندة إلى "السحب"، أي أنّ كل مكوّن في الحزمة يطلب إدخالاته من المكوّن الموجود أسفله بترتيب هرمي. يتوفّر في أعلى المكدس عرض إطارات الصوت والفيديو، وفي الجزء السفلي التالي منه فك الترميز، يليه إزالة التشويش، وأخيرًا يتم عرض إطارات الإدخال والإخراج (I/O). مع كل إطار صوتي يتم عرضه، يتم تسجيل ساعة تُستخدم لاختيار إطارات الفيديو لعرضها عند دمجها مع فاصل عرض تقديمي.

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

هناك طُرق إضافية لمزامنة الصوت والفيديو بطرق تجذب المشاهدين. راجع Project Butter لإجراء مناقشة أطول حول كيفية تحقيق السلاسة المثالية للفيديو في Chromium. وهو يوضّح كيفية تقسيم عرض الفيديو إلى تسلسلات مثالية تمثل عدد المرات التي يجب عرض كل إطار فيها. على سبيل المثال: "إطار واحد لكل فاصل عرض ([1]، 60 لقطة في الثانية ب 60 هرتز)"، "إطار واحد كل فاصلَين ([2]، 30 لقطة في الثانية في 60 هرتز)"، أو أنماط أكثر تعقيدًا مثل [2:3:2:3:2] (25 إطارًا في الثانية بفاصل 60 هرتز) منفصل. كلما اقترب عارض الفيديو من هذا النمط المثالي، ازداد احتمال أن يرى المستخدم أن التشغيل سلس.

يشير ذلك المصطلح إلى تسلسل إزالة التشويش وفك الترميز والعرض.

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

هل أصبح المستقبل الآن؟

لقد ركّزنا على كيفية الاستفادة من Chromium من الإصدارات الأساسية لنظام التشغيل لتقديم أفضل تجربة تشغيل في فئتها. وماذا عن المواقع الإلكترونية التي لا تكتفي بتشغيل الفيديوهات الأساسية؟ هل يمكننا أن نقدم لهم نفس المبادئ الأساسية القوية التي يستخدمها Chromium نفسه لبدء الجيل التالي من محتوى الويب؟

نعتقد أن الإجابة هي نعم! تكمن القابلية للتوسع في صميم طريقة تفكيرنا في منصة الويب في الوقت الحالي. لقد عملنا مع متصفحات ومطورين آخرين لإنشاء تقنيات جديدة مثل WebGPU وWebCodecs حتى يتمكن مطوّرو البرامج على الويب من استخدام نفس الأساسيات التي يستخدمها Chromium عند التحدث إلى نظام التشغيل. وتوفِّر WebGPU توافقًا مع المخازن المؤقتة لوحدة معالجة الرسومات، توفِّر WebCodecs مبادئ لفك الترميز والترميز الأساسية المتوافقة مع التراكب المذكور أعلاه وأنظمة التخزين المؤقت لوحدة معالجة الرسومات.

العلاقة بين WebCodecs وWebGPU

نهاية البث

شكرًا على القراءة. آمل أن تكون قد فهمت بشكل أفضل أنظمة التشغيل الحديثة وكيف يحافظ Chromium على مئات الملايين من ساعات المشاهدة يوميًا. إذا كنت تريد الاطّلاع على مزيد من المعلومات حول برامج الترميز وفيديوهات الويب الحديثة، أنصحك بقراءة المحتوى التالي: H.264 is الخلاف للمؤلف "سيد بالا"، وكيفية عمل مشغّلات الفيديو الحديثة من تأليف "إريكا بيفز"، وتجميع البرامج الحائزة على جوائز باستخدام تكنولوجيا حائزة على جوائز من تأليف "سيريل كونكولاتو".

صورة توضيحية واحدة من تصميم "أونا كرافيتس"