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

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

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

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

ضَع مستخلصات مخصّصة في /system/lib/64/extractors أو في ملف APEX الخاص بأحد المورّدين، الذي يتم فتحه مع ملف APEX من Google الذي يحتوي على مستخلصات 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 الذي يتم استخدامه تلقائيًا.