Android 10 या इसके बाद के वर्शन में, अपडेट किए जा सकने वाले कई मीडिया कॉम्पोनेंट शामिल होते हैं. इनकी मदद से, Google Play Store के इन्फ़्रास्ट्रक्चर या पार्टनर की ओर से उपलब्ध कराए गए ओवर-द-एयर (OTA) तरीके से, फ़्रेमवर्क कॉम्पोनेंट को अपडेट किया जा सकता है. मीडिया कॉम्पोनेंट को एक साथ मॉड्यूल में पैकेज किया जाता है. इससे, पूरे सिस्टम इमेज को अपडेट किए बिना, सुरक्षा से जुड़े अपडेट और सुविधा से जुड़े अपडेट दिए जा सकते हैं.
अपडेट किए जा सकने वाले मीडिया कॉम्पोनेंट, इन मॉड्यूल में मौजूद होते हैं.
Media. इस मॉड्यूल में मीडिया एक्सट्रैक्टर,
MediaSession2
एपीआई, औरMediaParser
एपीआई शामिल हैं.मीडिया कोडेक. इस मॉड्यूल में, अपडेट किए जा सकने वाले Codec2 सॉफ़्टवेयर कॉम्पोनेंट शामिल हैं.
MediaProvider. यह मॉड्यूल, इंडेक्स किए गए मेटाडेटा (एसडी कार्ड और यूएसबी डिवाइसों से ऑडियो, वीडियो, और इमेज) को ऑप्टिमाइज़ करता है. साथ ही, MediaStore के सार्वजनिक एपीआई के ज़रिए, उस डेटा को ऐप्लिकेशन के लिए उपलब्ध कराता है.
कस्टम एक्सट्रैक्टर और डिकोडर जोड़ने के बारे में ज़्यादा जानने के लिए, मीडिया कॉम्पोनेंट को पसंद के मुताबिक बनाना लेख पढ़ें.
मीडिया एक्सट्रैक्टर
Android 9 और इससे पहले वाले वर्शन में, एक्सट्रैक्टर को एक ही libstagefright.so
फ़ाइल में कंपाइल किया जाता है. Android 10 या इसके बाद के वर्शन में, मीडिया एक्सट्रैक्टर अलग-अलग कॉम्पोनेंट होते हैं. हर एक्सट्रैक्टर की अपनी .so
फ़ाइल होती है. इसमें एक एंट्री पॉइंट होता है. यह एंट्री पॉइंट, स्निफ़र फ़ंक्शन उपलब्ध कराता है. इससे यह पता चलता है कि एक्सट्रैक्टर, दी गई मीडिया फ़ाइल को प्रोसेस कर सकता है या नहीं. साथ ही, इसमें एक फ़ैक्ट्री फ़ंक्शन होता है. यह फ़ंक्शन, दी गई मीडिया फ़ाइल के लिए एक्सट्रैक्टर का एक इंस्टेंस बनाता है. हर एक्सट्रैक्टर का नाम दिया गया है, ताकि डीबग करने में मदद मिल सके. साथ ही, यह भी बताया गया है कि कौनसे एक्सट्रैक्टर का नया वर्शन उपलब्ध है.
मीडिया फ़्रेमवर्क, उपलब्ध सभी एक्सट्रैक्टर .so
फ़ाइलों को अपने-आप लोड कर देता है. इसलिए, नई .so
फ़ाइल जोड़कर अपने एक्सट्रैक्टर बनाए जा सकते हैं. इसके लिए, आपको libstagefright
या मीडिया फ़्रेमवर्क की अन्य लाइब्रेरी में बदलाव करने की ज़रूरत नहीं होती. यह भी पक्का किया जा सकता है कि 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/
में मौजूद टेस्ट का इस्तेमाल करें.
मीडिया कोडेक
Media Codecs मॉड्यूल में, अपडेट किए जा सकने वाले सॉफ़्टवेयर 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
सेवा रजिस्टर करें और आईओएन के इस्तेमाल के लिए कस्टम पैरामीटर दें.नई सेवा बनाने के लिए, 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
) माउंट पॉइंट से अपडेट किए गए मॉड्यूल लोड करती हैं.