اندروید ۱۰ یا بالاتر شامل چندین مؤلفه رسانهای قابل بهروزرسانی است که بهروزرسانی مؤلفههای چارچوب را از طریق زیرساخت فروشگاه گوگل پلی یا از طریق مکانیسم OTA (بیسیم) ارائه شده توسط شرکا امکانپذیر میکند. مؤلفههای رسانهای در ماژولهایی بستهبندی شدهاند که امکان ارائه بهروزرسانیهای امنیتی و بهروزرسانیهای ویژگیها را بدون نیاز به بهروزرسانی کامل تصویر سیستم فراهم میکنند.
اجزای رسانهای قابل بهروزرسانی در ماژولهای زیر وجود دارند.
رسانه. این ماژول شامل استخراجکنندههای رسانه ، رابطهای برنامهنویسی کاربردی
MediaSession2و رابطهای برنامهنویسی کاربردیMediaParserاست.کدکهای رسانهای . این ماژول شامل کامپوننتهای نرمافزاری قابل بهروزرسانی Codec2 است.
MediaProvider . این ماژول، فرادادههای فهرستبندیشده (صدا، ویدئو و تصاویر از کارتهای SD و دستگاههای USB) را بهینه میکند و این دادهها را از طریق APIهای عمومی MediaStore در دسترس برنامهها قرار میدهد.
برای جزئیات بیشتر در مورد افزودن استخراجکنندهها و رمزگشاهای سفارشی، به بخش «سفارشیسازی اجزای رسانه» مراجعه کنید.
استخراجکنندههای رسانه
در اندروید ۹ و پایینتر، استخراجکنندهها در یک فایل libstagefright.so کامپایل میشوند. در اندروید ۱۰ یا بالاتر، استخراجکنندههای رسانه اجزای جداگانهای هستند. هر استخراجکننده فایل .so مخصوص به خود را دارد که دارای یک نقطه ورود است که یک تابع sniffer برای تعیین اینکه آیا استخراجکننده میتواند فایل رسانهای داده شده را مدیریت کند یا خیر، و یک تابع factory که نمونهای از استخراجکننده را برای فایل رسانهای داده شده ایجاد میکند، ارائه میدهد. هر استخراجکننده نامگذاری شده است (برای کمک به اشکالزدایی) و نسخهبندی شده است تا نشان دهد کدام استخراجکننده جدیدترین است.
چارچوب رسانه به طور خودکار تمام فایلهای استخراجکنندهی .so موجود را بارگذاری میکند، بنابراین میتوانید با اضافه کردن یک فایل .so جدید و بدون نیاز به تغییر libstagefright یا سایر کتابخانههای چارچوب رسانه، استخراجکنندههای خودتان را ایجاد کنید. همچنین میتوانید اطمینان حاصل کنید که یک استخراجکنندهی سفارشی بر استخراجکنندهی ارائه شده توسط گوگل ترجیح داده میشود.
رابط برنامهنویسی کاربردی MediaSession2
رابط برنامهنویسی کاربردی MediaSession2 به برنامههای رسانهای اجازه میدهد تا کنترلهای انتقال و اطلاعات پخش خود را در اختیار فرآیندهای دیگری مانند چارچوب اندروید و سایر برنامهها قرار دهند. این مؤلفه قابل سفارشیسازی نیست.
رابط برنامهنویسی کاربردی مدیاپارسر
رابط برنامهنویسی کاربردی MediaParser به ExoPlayer اجازه میدهد تا از تجزیهکنندههای کانتینر رسانهای چارچوب برای استخراج نمونههای رسانهای از کانتینرهای رسانهای به طور کارآمد استفاده کند. MediaParser شامل تغییرات زیر در مرزهای کد منبع است:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java. پیادهسازی API و لایه نازک.external/exoplayer/. منابع کلمه به کلمه Exoplayer که MediaParser بر اساس آنها ساخته شده است.
رابط برنامهنویسی کاربردی (API) مدیاپارسر قابل سفارشیسازی نیست. برای آزمایش مدیاپارسر، از تستهای موجود در cts/tests/tests/mediaparser/ استفاده کنید.
کدکهای رسانهای
ماژول Media Codecs شامل اجزای نرمافزاری Codec2 قابل بهروزرسانی است. پشتیبانی از سفارشیسازی بین نسخههای مختلف متفاوت است:
در اندروید ۱۱ یا بالاتر (بهطور خاص بهروزرسانی سیستم گوگل پلی نسخه ۲۹۲۱۰۰۲۰۰ )، میتوانید پارامترهای تخصیص حافظه ION را سفارشی کنید (برای جزئیات بیشتر به زیر مراجعه کنید).
در اندروید ۹ یا پایینتر، API کدک OMX قابل بهروزرسانی نیست، اما همچنان میتوانید از آن در پارتیشن فروشنده استفاده کنید.
تخصیص حافظه ION
در اندروید ۱۱ یا بالاتر و بهروزرسانی سیستم گوگل پلی نسخه 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 هستند. اجزای رسانهای موجود فقط به APIهای NDK متکی هستند.
بهروزرسانیها
در طول یک بهروزرسانی، اجزای چارچوب روی دستگاه، یک بسته APEX را که حاوی جاوا و کد بومی است، بارگذاری میکنند.

شکل ۱. جریان بهروزرسانی مؤلفه رسانه
پس از نصب بسته APEX توسط فریم ورک، دستگاه ریبوت شده و ایمیج دیسک و فرآیندهای سیستم رسانه ( media.extractor و media.codec ) ماژولهای بهروزرسانیشده را از نقطه اتصال بارگذاری میکنند.