Android 10 या उसके बाद के वर्शन में, अपडेट किए जा सकने वाले कई मीडिया कॉम्पोनेंट शामिल होते हैं. इनकी मदद से, Google Play Store के इन्फ़्रास्ट्रक्चर या पार्टनर की ओर से उपलब्ध कराए गए ओवर-द-एयर (ओटीए) तरीके से, फ़्रेमवर्क कॉम्पोनेंट को अपडेट किया जा सकता है. मीडिया कॉम्पोनेंट को मॉड्यूल में एक साथ पैकेज किया जाता है. इससे, पूरी सिस्टम इमेज अपडेट किए बिना, सुरक्षा और सुविधाओं से जुड़े अपडेट दिए जा सकते हैं.
अपडेट किए जा सकने वाले मीडिया कॉम्पोनेंट, इन मॉड्यूल में मौजूद होते हैं.
Media. इस मॉड्यूल में मीडिया एक्सट्रैक्टर,
MediaSession2
एपीआई, औरMediaParser
एपीआई शामिल हैं.मीडिया कोडेक. इस मॉड्यूल में, अपडेट किए जा सकने वाले सॉफ़्टवेयर Codec2 कॉम्पोनेंट शामिल होते हैं.
MediaProvider. यह मॉड्यूल, इंडेक्स किए गए मेटाडेटा (एसडी कार्ड और यूएसबी डिवाइसों से मिले ऑडियो, वीडियो, और इमेज) को ऑप्टिमाइज़ करता है. साथ ही, MediaStore के सार्वजनिक एपीआई की मदद से, उस डेटा को ऐप्लिकेशन के लिए उपलब्ध कराता है.
कस्टम एक्सट्रैक्टर और डिकोडर जोड़ने के बारे में जानने के लिए, मीडिया कॉम्पोनेंट को पसंद के मुताबिक बनाना लेख पढ़ें.
मीडिया एक्सट्रैक्टर
Android 9 और इससे पहले के वर्शन में, एक्सट्रैक्टर को एक ही
libstagefright.so
फ़ाइल में कंपाइल किया जाता है. Android 10 या इसके बाद के वर्शन में, मीडिया एक्सट्रैक्टर अलग-अलग कॉम्पोनेंट होते हैं. हर एक्सट्रैक्टर की अपनी .so
फ़ाइल होती है. इसमें एक एंट्री पॉइंट होता है, जो स्निफ़र फ़ंक्शन उपलब्ध कराता है. इससे यह पता चलता है कि एक्सट्रैक्टर, दी गई मीडिया फ़ाइल को हैंडल कर सकता है या नहीं. साथ ही, इसमें एक फ़ैक्ट्री फ़ंक्शन होता है, जो दी गई मीडिया फ़ाइल के लिए एक्सट्रैक्टर का एक इंस्टेंस बनाता है. हर एक्सट्रैक्टर को नाम दिया जाता है (डबग करने में मदद करने के लिए) और वर्शन दिया जाता है, ताकि यह पता चल सके कि कौनसा एक्सट्रैक्टर सबसे नया है.
मीडिया फ़्रेमवर्क, एक्सट्रैक्टर .so
की सभी उपलब्ध फ़ाइलों को अपने-आप लोड करता है. इसलिए, libstagefright
या मीडिया फ़्रेमवर्क की अन्य लाइब्रेरी में बदलाव किए बिना, नई .so
फ़ाइल जोड़कर, अपने एक्सट्रैक्टर बनाए जा सकते हैं. यह भी पक्का किया जा सकता है कि Google के दिए गए एक्सट्रैक्टर के बजाय, कस्टम एक्सट्रैक्टर का इस्तेमाल किया जाए.
MediaSession2 API
MediaSession2 API की मदद से, मीडिया ऐप्लिकेशन अपने ट्रांसपोर्ट कंट्रोल और प्लेबैक की जानकारी को अन्य प्रोसेस के साथ शेयर कर सकते हैं. जैसे, Android फ़्रेमवर्क और अन्य ऐप्लिकेशन. इस कॉम्पोनेंट को पसंद के मुताबिक नहीं बनाया जा सकता.
MediaParser API
MediaParser API की मदद से, ExoPlayer फ़्रेमवर्क के मीडिया कंटेनर पार्सर का बेहतर तरीके से इस्तेमाल कर सकता है. इससे, मीडिया कंटेनर से मीडिया सैंपल निकाले जा सकते हैं. MediaParser में, सोर्स कोड की सीमाओं में ये बदलाव शामिल हैं:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
. एपीआई और थिन लेयर लागू करना.external/exoplayer/
. Exoplayer के वे वर्बेट सोर्स जिन पर MediaParser को बनाया गया है.
MediaParser API को पसंद के मुताबिक नहीं बनाया जा सकता. MediaParser की जांच करने के लिए, cts/tests/tests/mediaparser/
में दिए गए टेस्ट का इस्तेमाल करें.
मीडिया कोडेक
मीडिया कोडेक मॉड्यूल में, अपडेट किए जा सकने वाले सॉफ़्टवेयर Codec2 कॉम्पोनेंट शामिल होते हैं. रिलीज़ के हिसाब से, कस्टमाइज़ेशन के लिए सहायता अलग-अलग होती है:
Android 11 या उसके बाद के वर्शन (खास तौर पर Google Play सिस्टम अपडेट v292100200) में, ION मेमोरी के लिए पैरामीटर को पसंद के मुताबिक बनाया जा सकता है. ज़्यादा जानकारी के लिए नीचे देखें.
Android 9 या इससे पहले के वर्शन में, OMX कोडेक API को अपडेट नहीं किया जा सकता. हालांकि, अब भी इसे वेंडर पार्टीशन में इस्तेमाल किया जा सकता है.
ION मेमोरी ऐलोकेशन
Android 11 या उसके बाद के वर्शन और Google Play के सिस्टम अपडेट v292100200 या उसके बाद के वर्शन में, ION मेमोरी के लिए इन पैरामीटर को पसंद के मुताबिक बनाया जा सकता है.
पैरामीटर | डिफ़ॉल्ट मान | ब्यौरा |
---|---|---|
heapMask |
0xFFFFFFFF |
सभी तरह के हेप इस्तेमाल किए जा सकते हैं. |
allocFlags |
0 |
कोई फ़्लैग सेट नहीं है. |
minAlignment |
0 |
कोई अलाइनमेंट नहीं. |
पैरामीटर बदलने के लिए:
डिफ़ॉल्ट
android.hardware.media.c2
सेवा रजिस्टर करें और ION के इस्तेमाल से जुड़े कस्टम पैरामीटर दें.नई सेवा बनाने के लिए, frameworks/av/media/codec2/hidl/services/vendor.cpp फ़ाइल को अपनी रिपॉज़िटरी में कॉपी करें. इसके बाद, ज़रूरत के हिसाब से
StoreImpl::Interface::SetIonUsage()
में बदलाव करें.(OMX)
media.codec
प्रोसेस का फिर से इस्तेमाल करने के लिए,StoreImpl
क्लास को frameworks/av/media/codec2/hidl/services/vendor.cpp से मौजूदाmediacodec
फ़ाइल (frameworks/av/services/mediacodec/main_codecservice.cpp) में कॉपी और रजिस्टर करें.
डिवाइस
manifest.xml
में यह कोड जोड़ें.<hal format="hidl"> <name>android.hardware.media.c2</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IComponentStore</name> <instance>default</instance> </interface> </hal>
फ़ॉर्मैट और डिपेंडेंसी
मीडिया मॉड्यूल (com.android.media
) और मीडिया कोडेक मॉड्यूल (com.android.media.swcodec
), APEX फ़ॉर्मैट में हों. शामिल किए गए मीडिया कॉम्पोनेंट, सिर्फ़ NDK API पर निर्भर करते हैं.
अपडेट
अपडेट के दौरान, डिवाइस पर मौजूद फ़्रेमवर्क कॉम्पोनेंट, एक ऐसा APEX पैकेज लोड करते हैं जिसमें Java और नेटिव कोड होता है.
पहली इमेज. मीडिया कॉम्पोनेंट अपडेट करने का फ़्लो
फ़्रेमवर्क के APEX पैकेज को इंस्टॉल करने के बाद, डिवाइस रीबूट हो जाता है और डिस्क इमेज को माउंट कर देता है. साथ ही, मीडिया सिस्टम प्रोसेस (media.extractor
और media.codec
) माउंट पॉइंट से अपडेट किए गए मॉड्यूल लोड कर देती हैं.