تخصيص مكوّنات الوسائط

يمكنك توسيع نطاق مكونات أداة استخراج الوسائط وبرنامج ترميز الوسائط باستخدام المورِّد الإضافات. لا يمكن تخصيص واجهة برمجة تطبيقات MediaSession2 وMediaParser (ولكن يمكنك يمكنها تنفيذ التغييرات الرئيسية لواجهات برمجة التطبيقات القديمة MediaPlayer وMediaSession).

لإتاحة أنواع وسائط إضافية في إطار عمل وسائط Android، يجب: إنشاء أداة استخراج وفك ترميز مخصّصة على سبيل المثال: لإضافة دعم لفيديو Windows Media في ملفات AVI، يجب إنشاء ملف AVI أداة الاستخراج وأداة فك ترميز فيديو Windows Media.

لمحة عن الإضافات

إذا لم تلبّي أدوات استخراج الوسائط التلقائية متطلباتك، يمكنك وضع المكوّنات الإضافية المخصّصة لأداة الاستخراج في /system/lib[64]/extractors/. عملية استخراج البيانات يتم تلقائيًا تحميل المكوّنات الإضافية لأداة استخراج البيانات من حزمة APEX التي توفّرها Google. ابتداءً من /system/lib[64]/extractors/

وبالمثل، يمكنك إعداد خدمات برنامج ترميز وسائط مخصّصة تستخدم الإصدار 2.0 من برنامج الترميز. محددة في frameworks/av/media/codec2/core/. للحصول على التنفيذ، يمكنك الرجوع إلى frameworks/av/media/codec2/hidl/services/. تشير رسالة الأشكال البيانية هي نقطة الدخول إلى المكتبة هي الواجهة C2ComponentStore. على سبيل المثال، راجع إلى تطبيق مخزن ترميز البرامج الافتراضي frameworks/av/media/codec2/vndk/C2Store.cpp

عند استخدام APEX الخاص بك، عليك تنظيم خدمة برنامج الترميز وتحميل ملف APEX. يستخدم العمليات نفسها المستخدمة في خدمة mediaswcodec. للقيام بذلك، حدد مكتبة مشتركة ذات مستوى أعلى مسؤولة عن تسجيل جميع مكونات C2، ثم إنشاء حزمة APEX (ذات تبعيات متبادلة) موجودة في المورد قسم القرص. عندما تبدأ خدمة برنامج ترميز المورِّد، ستتمكن من تحميل هذا ونقطة الدخول من المستوى الأعلى.

إنشاء أداة استخراج

عند إضافة أداة استخراج لتنسيق جديد، تأكَّد من أن أداة الاستخراج لا تعتمد إلا على وهي واجهات برمجة تطبيقات ثابتة خاصة بـ NDK ولا تعتمد على أي واجهات برمجة تطبيقات خاصة. يجب على أدوات الاستخراج وتنفيذ واجهة برمجة التطبيقات المحددة من خلال frameworks/av/include/media/MediaExtractorPluginApi.h ويمكنه استخدام C++ لبرنامج تضمين البيانات في frameworks/av/include/media/MediaExtractorPluginHelper.h لأنّ Android 10 أو أعلى يدعم الإصدار الأعلى فقط من تأكد من تصميم أداة الاستخراج بعد أداة الاستخراج أعلى رقم إصدار لواجهة برمجة التطبيقات.

يُرجى وضع أدوات استخراج البيانات المخصّصة في /system/lib/64/extractors أو APEX للمورّدين. التي يتم فتحها مع ملف Google APEX الذي يحتوي على أدوات استخلاص البيانات من Google. إلى تحقق من أن إطار العمل حمّل أداة الاستخراج، شغل الأمر التالي.

adb shell dumpsys media.extractor

من المفترض أن تظهر لك قائمة بأدوات الاستخراج المتاحة والمشابهة لما يلي.

Available extractors:
AAC Extractor: plugin\_version(2), uuid(4fd80eae03d24d729eb948fa6bb54613), version(1), path(/system/lib64/extractors/libaacextractor.so)
AMR Extractor: plugin\_version(2), uuid(c86639c92f3140aca715fa01b4493aaf), version(1), path(/system/lib64/extractors/libamrextractor.so)
FLAC Extractor: plugin\_version(2), uuid(1364b048cc454fda9934327d0ebf9829), version(1), path(/system/lib64/extractors/libflacextractor.so)
MIDI Extractor: plugin\_version(2), uuid(ef6cca0af8a243e6ba5fdfcd7c9a7ef2), version(1), path(/system/lib64/extractors/libmidiextractor.so)
MP3 Extractor: plugin\_version(2), uuid(812a3f6cc8cf46deb5293774b14103d4), version(1), path(/system/lib64/extractors/libmp3extractor.so)
MP4 Extractor: plugin\_version(2), uuid(27575c6744174c548d3d8e626985a164), version(2), path(/system/lib64/extractors/libmp4extractor.so)
MPEG2-PS/TS Extractor: plugin\_version(1), uuid(3d1dcfebe40a436da574c2438a555e5f), version(1), path(/system/lib64/extractors/libmpeg2extractor.so)
Matroska Extractor: plugin\_version(2), uuid(abbedd9238c44904a4c1b3f45f899980), version(1), path(/system/lib64/extractors/libmkvextractor.so)
Ogg Extractor: plugin\_version(2), uuid(8cc5cd06f772495e8a62cba9649374e9), version(1), path(/system/lib64/extractors/liboggextractor.so)
WAV Extractor: plugin\_version(3), uuid(7d61385858374a3884c5332d1cddee27), version(1), path(/system/lib64/extractors/libwavextractor.so)

إذا كان الاستخراج المخصص يتوافق مع تنسيق متوافق من قبل أداة الاستخراج التي توفّرها Google، يمكنك فرض استخدام أداة الاستخلاص الخاصة بك في إطار العمل من خلال استخدام الدالة Sniff() لعرض مستوى ثقة أعلى من معرّف توفّره Google

عندما يحمّل إطار عمل الوسائط أداة الاستخراج (من /system/lib/64/extractors) أو من مورد APEX)، فإنها تتعرف على الملف وتحصل على معلومات حوله المحتوى. الخطوة التالية هي إضافة برنامج فك ترميز للتنسيق حتى يتمكن إطار العمل في فهم كيفية تحليل محتوى الملف.

إنشاء برنامج فك ترميز مخصّص

تحتاج إلى برنامج فك ترميز مخصص لأي تنسيق غير متوافق مع برنامج فك الترميز الذي توفّره Google مثلاً:

  • لإضافة إطار عمل للوسائط إلى ملفات AVI التي تحتوي على ملفات MP3، يجب استخدام AVI لكنّه لا يحتاج إلى برنامج فك ترميز ملفات MP3 نظرًا لوجود برنامج بالفعل.

  • لإتاحة إطار عمل الوسائط لملفات AVI التي تحتوي على ملفات Windows Media، يجب: إلى كل من مستخرج AVI وبرنامج فك ترميز Windows Media.

تشبه إضافة برنامج فك ترميز جديد إضافة برامج فك ترميز الأجهزة الخاصة بـ AVC أو HEVC.

ينشر المستخرج نوع MIME لمسارات الوسائط التي يجب أن تكون برامج الترميز التي تدعم أنواع MIME هذه متوفرة إلى دعم كامل. سلسلة نوع MIME الفعلية المستخدمة هي اتفاق بين أداة الاستخراج وبرنامج الترميز (ليس بالضرورة أن تكون السلسلة تمت إضافته إلى ملف MediaDefs.h).

الدمج مع الماسح الضوئي للوسائط

يبحث الماسح الضوئي للوسائط عن أنواع الملفات الجديدة ويضيفها إلى قاعدة بيانات الوسائط. ليتعامل الماسح الضوئي للوسائط مع نوع الملف المخصّص، يجب أن يستوفي الماسح الضوئي تعرفها. في نظام التشغيل Android 10 أو الإصدارات الأحدث، MimeUtils (في (libcore) تحتفظ بإمكانية الربط بين MIME والإضافة. في السابق، كان هذا التعيين تمت معالجته في ملف MediaFile.java، والذي لا يزال يحتوي على تعيين من من نوع MIME إلى ثوابت تنسيق بروتوكول نقل الوسائط (MTP).

يمكن لأداة استخلاص البيانات تصدير قائمة بامتدادات أسماء الملفات المتوافقة معها (مثل MP3) أو MP4). ومع ذلك، يتم استخدام هذه السمة في LegacyMediaScanner فقط. ليس له أي تأثير على ModernMediaScanner، والذي يتم استخدامه تلقائيًا.