تحويل ترميز الوسائط المتوافق

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

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

طريقة العمل

تتألف ميزة تحويل الترميز للوسائط المتوافقة من جزأين رئيسيَين:

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

يوضح الشكل 1 نظرة عامة على عملية تحويل ترميز الوسائط.

عملية تحويل ترميز الوسائط المتوافقة

الشكل 1. نظرة عامة على تحويل الترميز المتوافق مع الوسائط.

التنسيقات المعتمدة

تتيح ميزة تحويل ترميز الوسائط المتوافقة إجراء عمليات تحويل التنسيق التالية:

  • HEVC (8 بت) إلى AVC: يتم تحويل برنامج الترميز من خلال توصيل برنامج فك ترميز وسائط واحد وبرنامج ترميز وسائط واحد.
  • تقنية HDR10+ (10 بت) إلى AVC (SDR): يتم تنفيذ الإحالات الناجحة من HDR إلى SDR باستخدام مثيلات ترميز الوسائط وإدراج المكوّن الإضافي الخاص بالمورّد في النسخ الافتراضية من برنامج فك الترميز. للمزيد من المعلومات، يمكنك الاطّلاع على ترميز HDR إلى SDR.

مصادر المحتوى المتوافقة

تتوافق ميزة تحويل الترميز للوسائط المتوافقة مع الوسائط على الجهاز التي ينشئها تطبيق الكاميرا الأصلي من المصنّع الأصلي للجهاز والمخزن في مجلد DCIM/Camera/ بحجم الصوت الخارجي الأساسي. لا تتوافق الميزة مع الوسائط على وحدة تخزين ثانوية. والمحتوى الذي يتم تمريره إلى الأجهزة عبر البريد الإلكتروني أو بطاقات SD غير معتمد.

تصل التطبيقات إلى الملفات استنادًا إلى مسارات الملفات المختلفة. في ما يلي وصف لمسارات الملفات التي يتم فيها تفعيل تحويل الترميز أو تجاوزه:

  • تم تفعيل تحويل الترميز:

    • الوصول إلى التطبيق من خلال واجهات برمجة تطبيقات MediaStore
    • وصول التطبيقات من خلال واجهات برمجة التطبيقات المباشرة لمسار الملف، بما في ذلك JavaScript والرموز البرمجية الأصلية
    • وصول التطبيقات من خلال "إطار عمل الوصول إلى مساحة التخزين" (SAF)
    • وصول التطبيق من خلال ملفات Intent لنظام التشغيل (معرّف الموارد المنتظم (URI) لـ MediaStore فقط)
    • نقل ملف MTP/PTP من الهاتف إلى الكمبيوتر الشخصي
  • تم تجاوز تحويل الترميز:

    • نقل الملف خارج الجهاز من خلال إخراج بطاقة SD
    • نقل الملفات من جهاز إلى آخر باستخدام خيارات مثل "المشاركة عن قرب" أو "نقل البيانات عبر البلوتوث"

إضافة مسارات ملفات مخصّصة لتحويل الترميز

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

لإضافة مسار ملف، استخدِم مسار تحويل الترميز تراكب موارد وقت التشغيل (RRO)، config_supported_transcoding_relative_paths. فيما يلي مثال على كيفية إضافة مسار ملف:

<string-array name="config_supported_transcoding_relative_paths" translatable="false">
    <item>DCIM/JCF/</item>
</string-array>

للتحقّق من مسارات الملفات التي تم ضبطها، استخدِم ما يلي:

adb shell dumpsys activity provider com.google.android.providers.media.module/com.android.providers.media.MediaProvider | head -n 20

نظرة عامة على الهندسة

يصف هذا القسم بنية ميزة تحويل ترميز الوسائط.

بنية تحويل ترميز الوسائط

الشكل 2. بنية تحويل ترميز الوسائط.

تتكوّن بنية تحويل ترميز الوسائط من المكونات التالية:

  • واجهة برمجة تطبيقات نظام MediaTranscodingManager: تتيح للعميل الاتصال بخدمة MediaTranscoding. وتستخدم وحدة MediaProvider واجهة برمجة التطبيقات هذه.
  • MediaTranscodingService: خدمة أصلية تدير عمليات اتصال العملاء وجدولة طلبات تحويل الترميز وإدارة مسك الدفاتر لدى TranscodingSessions
  • MediaTranscoder: مكتبة أصلية تُجري عملية تحويل الترميز تم إنشاء هذه المكتبة في إطار إطار عمل الوسائط NDK لتكون متوافقة مع الوحدات.

تسجِّل ميزة تحويل ترميز الوسائط المتوافقة مقاييس تحويل الترميز في كلّ من الخدمة ومحوّل ترميز الوسائط. يتوفّر رمز جهة العميل والرمز الجانبي للخدمة في وحدة MediaProvider للسماح بإصلاح الأخطاء وإجراء التحديثات في الوقت المناسب.

الوصول إلى الملف

يتم إنشاء عملية تحويل الترميز للوسائط المتوافقة في أعلى نظام الملفات في نظام ملفات Userspace (FUSE)، الذي يُستخدم في مساحة التخزين محدَّدة النطاق. ويمكّن FUSE وحدة MediaProvider من فحص عمليات الملفات في مساحة المستخدم وفرض قيود على الوصول إلى الملفات بناءً على السياسة التي تسمح بالوصول إلى الملفات أو رفضها أو إخفاؤها.

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

طلب الملفات التي تم تحويل ترميزها

يتم إيقاف ميزة تحويل ترميز الوسائط المتوافقة تلقائيًا، ما يعني أنّه إذا كان الجهاز متوافقًا مع HEVC، لن يحوّل Android ترميز الملفات ما لم يحدّده تطبيق في ملف بيان أو في قائمة فرض تحويل الترميز.

يمكن للتطبيقات طلب مواد عرض تم تحويل ترميزها باستخدام الخيارات التالية:

  • يُرجى تعريف التنسيقات غير المتوافقة في ملف البيان. لمعرفة التفاصيل، يُرجى الاطّلاع على توضيح الإمكانات في أحد الموارد وتوضيح الإمكانات في الرمز البرمجي.
  • أضِف التطبيقات إلى قائمة فرض تحويل الترميز المضمّنة في وحدة MediaProvider. ويتيح ذلك تحويل الترميز للتطبيقات التي لم تعدِّل ملف البيان. بعد تحديث أحد التطبيقات لملف البيان بتنسيقات غير متوافقة، يجب إزالته من قائمة فرض تحويل الترميز. يمكن للشركات المصنّعة للأجهزة ترشيح تطبيقاتها لإضافتها أو إزالتها من قائمة فرض تحويل الترميز من خلال إرسال رمز تصحيح أو الإبلاغ عن خطأ. يراجع فريق Android القائمة بشكل دوري وقد يزيل التطبيقات منها.
  • يمكنك إيقاف التنسيقات المتوافقة مع إطار عمل التوافق مع التطبيقات في وقت التشغيل (يمكن للمستخدمين أيضًا إيقاف هذه الميزة لكل تطبيق من خلال "الإعدادات").
  • يمكنك فتح ملف باستخدام MediaStore مع تحديد التنسيقات غير المتوافقة بوضوح باستخدام واجهة برمجة التطبيقات openTypedAssetFileDescriptor.

بالنسبة إلى عمليات النقل عبر USB (من جهاز إلى كمبيوتر شخصي)، يتم إيقاف تحويل الترميز تلقائيًا ولكن يمكن للمستخدمين اختيار تفعيل تحويل الترميز باستخدام زر التبديل تحويل الفيديوهات إلى تنسيق AVC في شاشة إعداد إعدادات USB المفضَّلة كما هو موضّح في الشكل 3.

التبديل لتفعيل تحويل ترميز الوسائط

الشكل 3. انقر على مفتاح التبديل لتفعيل ميزة تحويل ترميز الوسائط في شاشة الإعدادات المفضّلة لـ USB.

القيود المفروضة على طلب الملفات التي تم تحويل ترميزها

ولمنع طلبات تحويل الترميز من قفل موارد النظام لفترات طويلة، تقتصر التطبيقات التي تطلب جلسات تحويل الترميز على ما يلي:

  • 10 جلسات متتالية
  • إجمالي وقت التشغيل يبلغ ثلاث دقائق

وإذا تجاوز أحد التطبيقات كل هذه القيود، سيعرض إطار العمل واصف الملف الأصلي.

متطلبات الأجهزة

لإتاحة الميزة المتوافقة لتحويل الترميز للوسائط، يجب أن تستوفي الأجهزة المتطلبات التالية:

  • تم تفعيل ترميز HEVC على الجهاز تلقائيًا في تطبيق الكاميرا الأصلي.
  • (الأجهزة التي تتيح تحويل الترميز من HDR إلى SDR) يتوافق الجهاز مع ميزة التقاط الفيديوهات بنطاق عالي الديناميكية (HDR)

لضمان أداء الجهاز لتحويل ترميز الوسائط، يجب تحسين أداء أجهزة الفيديو والوصول إلى القراءة/الكتابة. عند ضبط برامج ترميز الوسائط على أولوية تساوي 1، يجب أن تعمل برامج الترميز بأعلى سرعة ممكنة لمعالجة البيانات. ننصح بأن يحقّق أداء تحويل الترميز الحدّ الأدنى من 200 لقطة في الثانية. لاختبار أداء أجهزتك، يُرجى تشغيل معيار محول ترميز الوسائط على frameworks/av/media/libmediatranscoding/transcoder/benchmark.

التحقُّق

للتحقّق من ميزة تحويل الترميز المتوافقة مع الوسائط، يُرجى تشغيل اختبارات CTS التالية:

  • android.media.mediatranscoding.cts
  • android.mediaprovidertranscode.cts

تفعيل تحويل ترميز الوسائط على مستوى العالم

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

التحقّق من حالة تحويل الترميز

أثناء الاختبار، يمكنك استخدام أمر ADB Shell التالي للتحقق من حالة تحويل الترميز، بما في ذلك جلسات تحويل الترميز الحالية والسابقة:

adb shell dumpsys media.transcoding

تمديد مدة الفيديو

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

adb shell device_config put storage_native_boot transcode_max_duration_ms <LARGE_NUMBER_IN_MS>

مصدر ومراجع AOSP

في ما يلي رمز مصدر AOSP المتعلق بتحويل الترميز المتوافق مع الوسائط.

ترميز HDR إلى SDR

لإتاحة ترميز النطاق العالي الديناميكية إلى SDR، يمكن للشركات المصنّعة للأجهزة استخدام المكوِّن الإضافي لفلتر AOSP في برنامج Codec 2.0 المتوفّر في /platform/frameworks/av/media/codec2/hidl/plugin/. يصف هذا القسم طريقة عمل المكوّن الإضافي للفلتر، وطريقة تنفيذ المكوّن الإضافي، واختباره.

إذا لم يتضمن الجهاز مكوّنًا إضافيًا يتوافق مع ترميز HDR إلى SDR، سيحصل التطبيق الذي يصل إلى فيديو HDR على واصف الملف الأصلي بغض النظر عن إمكانات وسائط التطبيق المُعلَن عنها في البيان.

طريقة العمل

يصف هذا القسم السلوك العام للمكوّن الإضافي لفلتر الترميز 2.0.

معلومات أساسية

يوفّر Android تنفيذ طبقة تكيّف بين واجهة Codec 2.0 وواجهة android.hardware.media.c2 HAL على android::hardware::media::c2. بالنسبة إلى المكوّنات الإضافية للفلاتر، يشتمل AOSP على آلية برنامج تضمين تربط برامج فك الترميز مع المكوّنات الإضافية للفلاتر. تتعرّف أداة MediaCodec على هذه المكوّنات الملفوفة كبرامج فك الترميز مع ميزات الفلترة.

نظرة عامة

تأخذ الفئة FilterWrapper برامج ترميز المورّدين وتعيد برامج الترميز الملفوفة إلى طبقة التكيّف media.c2. تُحمِّل الفئة FilterWrapper libc2filterplugin.so من خلال واجهة برمجة التطبيقات FilterWrapper::Plugin وتسجّل الفلاتر المتاحة من المكوّن الإضافي. عند الإنشاء، يتم تفعيل جميع الفلاتر المتاحة من خلال "FilterWrapper". تبدأ فقط عوامل التصفية التي تغير المخزن المؤقت عند البدء.

بنية المكوّنات الإضافية للفلترة

الشكل 1. تصفية بنية المكونات الإضافية.

واجهة المكوّن الإضافي للفلتر

تحدِّد واجهة FilterPlugin.h واجهات برمجة التطبيقات التالية لعرض الفلاتر:

  • std::shared_ptr<C2ComponentStore>getComponentStore()

    تعرض عنصر C2ComponentStore يحتوي على فلاتر. وهذا منفصل عما يكشفه تطبيق Codec 2.0 لدى المورّد. يحتوي هذا المتجر عادةً على الفلاتر التي تستخدمها الفئة FilterWrapper فقط.

  • bool describe(C2String name, Descriptor *desc)

    وصف الفلاتر بالإضافة إلى ما هو متاح من C2ComponentStore. يتم تحديد الأوصاف التالية:

    • controlParam: المَعلمات التي تتحكّم في سلوك الفلاتر على سبيل المثال، بالنسبة إلى أداة تحديد تدرّج الألوان من نطاق HDR إلى نطاق SDR، تكون مَعلمة Control هي وظيفة النقل المستهدَفة.
    • affectedParams: المَعلمات التي تتأثر بعمليات الفلترة على سبيل المثال، بالنسبة إلى أداة تحديد تدرّج الألوان من نطاق HDR إلى نطاق SDR، تكون المَعلمات المتأثرة بالمشكلة هي جوانب الألوان.
  • bool isFilteringEnabled(const std::shared_ptr<C2ComponentInterface> &intf)

    تعرض true إذا غيّر مكوّن الفلتر المخزن المؤقت. على سبيل المثال، يعرض فلتر ربط الألوان true إذا كانت وظيفة النقل المستهدفة هي SDR وكانت وظيفة نقل الإدخال هي HDR (HLG أو PQ).

تفاصيل عامل التصفية

يوضّح القسم تفاصيل الفئة FilterWrapper.

العائلة والمجتمع

ينشئ المكوِّن الملفوف مثيلاً لبرنامج فك الترميز الأساسي وجميع الفلاتر المحددة عند الإنشاء.

طلب البحث والتهيئة

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

طلب البحث والتهيئة

الشكل 2. طلب البحث والتهيئة.

بدء

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

معالجة المورد الاحتياطي

معالجة المورد الاحتياطي

الشكل 3. التعامل مع سعة التخزين المؤقتة.

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

لكي تعمل معالجة المخزن المؤقت هذه، يجب أن يضبط المكوِّن الملفوف C2PortBlockPoolsTuning على الفلتر الأخير لكي يتم تخزين نتائج إطار العمل مؤقتًا من مجموعة الكتل المتوقعة.

الإيقاف وإعادة الضبط والإفلات

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

تنفيذ المكوّن الإضافي لفلتر النموذج

لتمكين المكون الإضافي، قم بما يلي:

  1. نفِّذ واجهة FilterPlugin في مكتبة وأفلتها في /vendor/lib[64]/libc2filterplugin.so.
  2. أضِف أذونات إضافية إلى mediacodec.te إذا لزم الأمر.
  3. عليك تحديث طبقة التكيف إلى Android 12 وإعادة إنشاء خدمة media.c2.

اختبار المكوّن الإضافي

لاختبار نموذج المكوِّن الإضافي، اتّبِع الخطوات التالية:

  1. أعِد إنشاء الجهاز ووميضه.
  2. يمكنك إنشاء نموذج المكوِّن الإضافي باستخدام الأمر التالي:

    m sample-codec2-filter-plugin
    
  3. أعِد تثبيت الجهاز وأعِد تسمية المكوّن الإضافي للمورد حتى تتعرّف عليه خدمة برنامج الترميز.

    adb root
    adb remount
    adb reboot
    adb wait-for-device
    adb root
    adb remount
    adb
    push /out/target/<...>/lib64/sample-codec2-filter-plugin.so \
    
    /vendor/lib64/libc2filterplugin.so
    adb push
    /out/target/<...>/lib/sample-codec2-filter-plugin.so \
    
    /vendor/lib/libc2filterplugin.so
    adb reboot