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

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

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

كيف تعمل

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

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

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

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

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

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

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

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

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

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

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

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

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

تمكين تحويل الوسائط عالميًا

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

تحقق من حالة التحويل

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

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 sample Codec 2.0 filter plugin الموجود في /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 API وتسجيل المرشحات المتاحة من البرنامج المساعد. عند الإنشاء ، FilterWrapper بإنشاء مثيل لجميع المرشحات المتاحة. يتم تشغيل المرشحات التي تغير المخزن المؤقت فقط في البداية.

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

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

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

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

  • std::shared_ptr<C2ComponentStore>getComponentStore()

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

  • bool describe(C2String name, Descriptor *desc)

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

    • controlParam : المعلمات التي تتحكم في سلوك المرشحات. على سبيل المثال ، بالنسبة لـ HDR to SDR tone-mapper ، فإن معلمة التحكم هي وظيفة النقل الهدف.
    • 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