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

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

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

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

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