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

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

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

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

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

وبالمثل، يمكنك إعداد خدمات ترميز وسائط مخصّصة تستخدِم واجهة Codec 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. بما أنّ الإصدار 10 من نظام Android أو الإصدارات الأحدث لا تتوافق إلا مع أحدث إصدار من واجهة برمجة التطبيقات للمحلِّل، احرص على تصميم نموذج للمحلِّل بالاستناد إلى المحلِّل الذي يستخدم رقم الإصدار الأعلى لواجهة برمجة التطبيقات.

يُرجى وضع أدوات استخراج البيانات المخصّصة في /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).

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

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

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