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

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

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

آلية العمل

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

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

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

عملية تحويل الوسائط إلى تنسيق متوافق

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

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

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

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

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

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

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

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

    • الوصول إلى التطبيق من خلال واجهات برمجة التطبيقات MediaStore
    • الوصول إلى التطبيق من خلال واجهات برمجة التطبيقات المباشرة لمسار الملف، بما في ذلك رمز Java والرمز البرمجي الأصلي
    • الوصول إلى التطبيق من خلال إطار عمل الوصول إلى مساحة التخزين (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

نظرة عامة على البنية

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

media-transcoding-architecture

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

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

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

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

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

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

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

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

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

  • عليك الإفصاح عن التنسيقات غير المتوافقة في ملف البيان. لمعرفة التفاصيل، يُرجى الاطّلاع على تعريف الإمكانات في أحد الموارد وتعريف الإمكانات في الرمز.
  • إيقاف التنسيقات المتوافقة باستخدام إطار عمل توافق التطبيقات في وقت التشغيل (يمكن للمستخدمين أيضًا إيقاف هذه الميزة لكل تطبيق في "الإعدادات").
  • افتح ملفًا باستخدام 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

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

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

آلية العمل

يوضّح هذا القسم السلوك العام لمكوّن Codec 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 جميع الفلاتر المتاحة. يتم بدء الفلاتر التي تغيّر المخزن المؤقت فقط عند بدء البث.

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

الشكل 4. بنية المكوّن الإضافي الخاص بالفلترة

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

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

  • std::shared_ptr<C2ComponentStore>getComponentStore()

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

  • bool describe(C2String name, Descriptor *desc)

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

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

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

تفاصيل FilterWrapper

يصف القسم تفاصيل الفئة FilterWrapper.

الإنشاء

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

طلب البحث والإعداد

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

طلب البحث والإعداد

الشكل 5. طلب البحث والإعدادات

بدء

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

معالجة المخزن المؤقت

معالجة المخزن المؤقت

الشكل 6. التعامل مع المخزن المؤقت

يتم إرسال المخازن المؤقتة التي تمّت إضافتها إلى قائمة انتظار برنامج الترميز المغلَّف إلى برنامج الترميز الأساسي. يحصل المكوّن المغلَّف على مخزن مؤقت للإخراج من برنامج الترميز من خلال دالة رد الاتصال 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