वेंडर एक्सटेंशन का इस्तेमाल करके, मीडिया एक्सट्रैक्टर और मीडिया कोडेक कॉम्पोनेंट को बढ़ाया जा सकता है. MediaSession2 और MediaParser एपीआई को पसंद के मुताबिक नहीं बनाया जा सकता. हालांकि, आपके पास लेगसी MediaPlayer
और MediaSession
एपीआई के लिए, अपस्ट्रीम में बदलाव करने का विकल्प है.
Android मीडिया फ़्रेमवर्क में अन्य मीडिया टाइप के साथ काम करने के लिए, आपको कस्टम एक्सट्रैक्टर और डिकोडर बनाना होगा. उदाहरण के लिए, AVI फ़ाइलों में Windows Media वीडियो के लिए सहायता जोड़ने के लिए, आपको AVI एक्सट्रैक्टर और Windows Media वीडियो डिकोडर बनाना होगा.
एक्सटेंशन के बारे में जानकारी
अगर डिफ़ॉल्ट मीडिया एक्सट्रैक्टर आपकी ज़रूरतों के मुताबिक नहीं हैं, तो /system/lib[64]/extractors/
में कस्टम एक्सट्रैक्टर प्लग इन डाले जा सकते हैं. एक्सट्रैक्टर प्रोसेस, Google के दिए गए APEX पैकेज और /system/lib[64]/extractors/
से, एक्सट्रैक्टर प्लग इन को अपने-आप लोड करती है.
इसी तरह, आपके पास कस्टम मीडिया कोडेक सेवाएं सेट अप करने का विकल्प भी है. ये सेवाएं frameworks/av/media/codec2/core/
में तय किए गए कोडेक 2.0 इंटरफ़ेस का इस्तेमाल करती हैं. बुनियादी तौर पर लागू करने के लिए, frameworks/av/media/codec2/hidl/services/
देखें. लाइब्रेरी का एंट्री पॉइंट, C2ComponentStore
इंटरफ़ेस है. उदाहरण के लिए, डिफ़ॉल्ट सॉफ़्टवेयर कोडेक स्टोर को लागू करने के बारे में जानने के लिए, frameworks/av/media/codec2/vndk/C2Store.cpp
पर जाएं.
अपने एपीईएक्स का इस्तेमाल करते समय, कोडेक सेवा को व्यवस्थित करें और mediaswcodec
सेवा की प्रोसेस का इस्तेमाल करके, एपीईएक्स फ़ाइल को लोड करें. ऐसा करने के लिए, एक टॉप लेवल शेयर की गई लाइब्रेरी तय करें जो सभी C2 कॉम्पोनेंट को रजिस्टर करने के लिए ज़िम्मेदार है. इसके बाद, वेंडर पार्टीशन में मौजूद एक APEX पैकेज (ट्रांसफ़रिव डिपेंडेंसी के साथ) बनाएं. वेंडर कोडेक सेवा की प्रोसेस शुरू होने पर, यह टॉप-लेवल एंट्री पॉइंट लोड कर सकता है.
एक्सट्रैक्टर बनाना
किसी नए फ़ॉर्मैट के लिए एक्सट्रैक्टर जोड़ते समय, पक्का करें कि एक्सट्रैक्टर सिर्फ़ स्थिर NDK एपीआई पर निर्भर हो और किसी निजी एपीआई पर निर्भर न हो. एक्सट्रैक्टर को frameworks/av/include/media/MediaExtractorPluginApi.h
में बताए गए एपीआई को लागू करना चाहिए. साथ ही, frameworks/av/include/media/MediaExtractorPluginHelper.h
में C++ के सुविधाजनक रैपर का इस्तेमाल किया जा सकता है. Android 10 या उसके बाद के वर्शन पर, एक्सट्रैक्टर एपीआई का सिर्फ़ सबसे नया वर्शन काम करता है. इसलिए, अपने एक्सट्रैक्टर को सबसे नए एपीआई वर्शन के बाद मॉडल करना न भूलें.
/system/lib/64/extractors
या किसी वेंडर APEX
में, पसंद के मुताबिक डेटा इकट्ठा करने वाले टूल रखें. यह डिवाइस, Google के डेटा इकट्ठा करने वाले टूल वाले Google APEX के साथ खोला जाता है. फ़्रेमवर्क ने आपका एक्सट्रैक्टर लोड किया है या नहीं, इसकी पुष्टि करने के लिए यह कमांड चलाएं.
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 के उपलब्ध कराए गए डिकोडर पर पहले से काम नहीं करता है. उदाहरण के लिए:
MP3 वाली AVI फ़ाइलों के लिए मीडिया फ़्रेमवर्क समर्थन जोड़ने के लिए, आपको एक AVI एक्सट्रैकर की ज़रूरत है, लेकिन आपको MP3 डिकोडर की ज़रूरत नहीं है, क्योंकि एक पहले से मौजूद है.
Windows Media वाली AVI फ़ाइलों के लिए मीडिया फ़्रेमवर्क समर्थन जोड़ने के लिए, आपको AVI निकालने वाले और Windows Media डिकोडर दोनों की आवश्यकता होगी.
नया डिकोडर जोड़ना, एवीसी या एचईवीसी के लिए अपने हार्डवेयर डिकोडर जोड़ने जैसा ही है.
डेटा इकट्ठा करने वाला टूल, इसमें शामिल मीडिया ट्रैक के MIME टाइप को पब्लिश करता है. हालांकि, फ़ाइल के पूरी तरह से काम करने के लिए, इन MIME टाइप के साथ काम करने वाले कोडेक मौजूद होने चाहिए. इस्तेमाल की जाने वाली असल MIME टाइप स्ट्रिंग,
डेटा इकट्ठा करने वाले टूल और कोडेक के बीच का एक समझौता है. (स्ट्रिंग को MediaDefs.h
फ़ाइल में जोड़ना ज़रूरी नहीं है).
मीडिया स्कैनर के साथ इंटिग्रेट करें
मीडिया स्कैनर, नए फ़ाइल टाइप खोजता है और उन्हें मीडिया डेटाबेस में जोड़ता है.
मीडिया स्कैनर को आपकी पसंद के मुताबिक फ़ाइल टाइप को मैनेज करने के लिए, स्कैनर को इसके बारे में जानकारी होनी चाहिए. Android 10 या इसके बाद के वर्शन में, MimeUtils
(libcore
में) MIME से एक्सटेंशन की मैपिंग को बनाए रखता है. पहले, इस मैपिंग को MediaFile.java
फ़ाइल में मैनेज किया जाता था. इसमें एमआईएम टाइप से एमटीपी फ़ॉर्मैट के कॉन्स्टेंट तक की मैपिंग होती है.
एक्सट्रैक्टर, फ़ाइल नाम के उन एक्सटेंशन की सूची एक्सपोर्ट कर सकता है जिनमें काम करता है. जैसे, MP3 या MP4. हालांकि, सिर्फ़ LegacyMediaScanner
इसका इस्तेमाल करता है. इसका डिफ़ॉल्ट रूप से ModernMediaScanner
पर कोई असर नहीं पड़ता.