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

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