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