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

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

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

كيف تعمل

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

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

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

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

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

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

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

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

مصادر المحتوى المدعومة

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

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

  • تمكين تحويل الترميز:

    • الوصول إلى التطبيق من خلال واجهات برمجة تطبيقات MediaStore
    • الوصول إلى التطبيق من خلال واجهات برمجة تطبيقات مسار الملف المباشر بما في ذلك Java والتعليمات البرمجية الأصلية
    • الوصول إلى التطبيق من خلال إطار الوصول إلى التخزين (SAF)
    • الوصول إلى التطبيق من خلال ورقة مشاركة نظام التشغيل Intents. (MediaStore URI فقط)
    • نقل الملفات 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 للسماح بإصلاحات الأخطاء والتحديثات في الوقت المناسب.

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

تم إنشاء ترميز الوسائط المتوافقة أعلى نظام الملفات في مساحة المستخدم (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

لدعم تشفير 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 بإنشاء مثيل لجميع المرشحات المتاحة. يتم تشغيل المرشحات التي تغير المخزن المؤقت فقط في البداية.

تصفية بنية البرنامج المساعد

الشكل 1. تصفية بنية البرنامج المساعد.

واجهة البرنامج المساعد تصفية

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

  • std::shared_ptr<C2ComponentStore>getComponentStore()

    إرجاع كائن C2ComponentStore الذي يحتوي على عوامل التصفية. وهذا منفصل عما يكشفه تطبيق Codec 2.0 الخاص بالمورد. عادةً، يحتوي هذا المتجر فقط على المرشحات المستخدمة بواسطة فئة te 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 .

خلق

يقوم المكون الملتف بإنشاء مثيل لوحدة فك التشفير الأساسية وجميع المرشحات المحددة عند الإنشاء.

الاستعلام والتكوين

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

الاستعلام والتكوين

الشكل 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