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

إنّ ميزة تحويل ترميز الوسائط المتوافقة، التي تم طرحها في الإصدار 12 من نظام التشغيل Android، هي ميزة تتيح للأجهزة استخدام تنسيقات وسائط أكثر حداثة وفعالية في ما يخص مساحة التخزين لتسجيل الفيديوهات، مثل 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)
    • الوصول إلى التطبيق من خلال نوايا "صفحة المشاركة" في نظام التشغيل (معرّف الموارد المنتظم (URI) لـ MediaStore فقط)
    • نقل ملف MTP/PTP من الهاتف إلى الكمبيوتر الشخصي
  • الحالات التي يتم فيها تخطّي عملية تحويل الترميز:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

لضمان أداء الجهاز في تحويل ترميز الوسائط، يجب تحسين أداء الوصول إلى مكونات الفيديو ومساحة التخزين للقراءة/الكتابة. عند ضبط برامج ترميز الوسائط بأولوية تساوي 1، يجب أن تعمل برامج الترميز بأعلى معدل نقل بيانات ممكن. ننصح بأن يحقّق أداء تحويل الترميز الحدّ الأدنى من 200 لقطة في الثانية. لاختبار أداء الأجهزة، يمكنك إجراء اختبار قياس أداء transcoder الوسائط على 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 مكوّن فلاتر الترميز 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