मीडिया कॉम्पोनेंट पसंद के मुताबिक बनाएं

वेंडर का इस्तेमाल करके, मीडिया एक्सट्रैक्टर और मीडिया कोडेक कॉम्पोनेंट को बढ़ाया जा सकता है एक्सटेंशन. Mediasession2 और MediaParser API को पसंद के मुताबिक नहीं बनाया जा सकता. हालांकि, MediaPlayer और MediaSession एपीआई के लिए, अपस्ट्रीम बदलाव कर सकता है).

Android मीडिया फ़्रेमवर्क में दूसरी तरह के मीडिया के साथ काम करने के लिए, आपको ये काम करने होंगे पसंद के मुताबिक एक्सट्रैकर और डीकोडर बनाएं. उदाहरण के लिए, AVI फ़ाइलों में Windows Media वीडियो के लिए समर्थन जोड़ने के लिए, आपको एक AVI बनाना होगा एक्सट्रैकर और एक Windows Media वीडियो Decoder.

एक्सटेंशन के बारे में जानकारी

अगर मीडिया डेटा इकट्ठा करने वाले डिफ़ॉल्ट टूल आपकी ज़रूरी शर्तों को पूरा नहीं करते, तो /system/lib[64]/extractors/ में कस्टम एक्सट्रैक्टर प्लगिन. डेटा इकट्ठा करने की प्रोसेस यह Google के दिए गए APEX पैकेज से डेटा इकट्ठा करने वाले प्लगिन को अपने-आप लोड करता है और /system/lib[64]/extractors/ से.

इसी तरह, आप कस्टम मीडिया कोडेक सेवाएं सेट अप कर सकते हैं जो कोडेक 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 पैकेज (ट्रांज़िटिव डिपेंडेंसी के साथ) बनाना विभाजन. जब वेंडर कोडेक सेवा प्रक्रिया शुरू होती है, तब वह इसे लोड कर सकती है टॉप लेवल एंट्री पॉइंट.

डेटा इकट्ठा करने वाला टूल बनाएं

नए फ़ॉर्मैट के लिए डेटा इकट्ठा करने वाले टूल को जोड़ते समय, पक्का करें कि एक्सट्रैक्टर सिर्फ़ स्थायी एनडीके एपीआई बनाए जाते हैं. साथ ही, यह किसी निजी एपीआई पर निर्भर नहीं करता. एक्सट्रैक्टर को यह करना चाहिए एपीआई को लागू करें, जो 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 डिकोडर दोनों की ज़रूरत होती है.

नया डिकोडर जोड़ना, एवीसी या एचईवीसी.

डेटा इकट्ठा करने वाला टूल, उन मीडिया ट्रैक के एमआईएमई टाइप को पब्लिश करता है जिन्हें वह में शामिल है, तो इन MIME टाइप का समर्थन करने वाले कोडेक फ़ाइल का पूरा इस्तेमाल किया जा सकता है. इस्तेमाल की गई असल MIME टाइप स्ट्रिंग एक्सट्रैक्टर और कोडेक के बीच का समझौता (स्ट्रिंग में MediaDefs.h फ़ाइल में जोड़ा गया).

मीडिया स्कैनर के साथ इंटिग्रेट करें

मीडिया स्कैनर नए फ़ाइल टाइप खोजता है और उन्हें मीडिया डेटाबेस में जोड़ता है. मीडिया स्कैनर से आपका पसंदीदा फ़ाइल टाइप हैंडल किया जा सके, इसके लिए स्कैनर को ये काम करने होंगे इसके बारे में जानें. Android 10 या उसके बाद वाले वर्शन में, MimeUtils ( libcore) MIME-टू-एक्सटेंशन मैपिंग को बनाए रखता है. पहले, यह मैपिंग MediaFile.java फ़ाइल में हैंडल किया जाता है, जिसमें इसकी मैपिंग शामिल होती है MIME टाइप से MTP फ़ॉर्मैट कॉन्सटेंट.

डेटा इकट्ठा करने वाला टूल, फ़ाइल नाम के उन एक्सटेंशन की सूची एक्सपोर्ट कर सकता है जिन पर यह काम करता है (जैसे कि MP3) या MP4) में से किसी एक को शामिल करता है. हालांकि, सिर्फ़ LegacyMediaScanner इसका इस्तेमाल करता है; इसका कोई असर नहीं पड़ता ModernMediaScanner, जिसे डिफ़ॉल्ट रूप से इस्तेमाल किया जाता है.