Android 10 یا بالاتر شامل چندین مؤلفه رسانه قابل بهروزرسانی است که بهروزرسانی مؤلفههای چارچوب را از طریق زیرساخت فروشگاه Google Play یا از طریق یک مکانیسم over-the-air (OTA) توسط شریک ارائه میدهد. اجزای رسانه با هم در ماژول هایی بسته بندی شده اند که امکان ارائه به روز رسانی های امنیتی و به روز رسانی ویژگی ها را بدون نیاز به به روز رسانی کامل تصویر سیستم فراهم می کند.
اجزای رسانه قابل به روز رسانی در ماژول های زیر وجود دارد.
رسانه ها این ماژول شامل استخراج کننده های رسانه ، API های
MediaSession2
و API هایMediaParser
است.کدک های رسانه ای این ماژول شامل اجزای نرم افزار Codec2 قابل به روز رسانی است.
MediaProvider . این ماژول ابرداده های نمایه شده (صوتی، ویدئو، و تصاویر از کارت های SD و دستگاه های USB) را بهینه می کند و آن داده ها را از طریق API های عمومی MediaStore در دسترس برنامه ها قرار می دهد.
برای جزئیات بیشتر در مورد افزودن استخراج کننده ها و رمزگشاهای سفارشی، به سفارشی سازی اجزای رسانه مراجعه کنید.
استخراج کننده های رسانه
در اندروید 9 و پایین تر، استخراج کننده ها در یک فایل libstagefright.so
کامپایل می شوند. در اندروید 10 یا بالاتر، استخراج کننده های رسانه اجزای جداگانه ای هستند. هر استخراج کننده فایل .so
مخصوص به خود را با یک نقطه ورودی دارد که یک تابع sniffer برای تعیین اینکه آیا استخراج کننده می تواند فایل رسانه ای داده شده را مدیریت کند یا خیر، و یک تابع کارخانه که نمونه ای از استخراج کننده را برای فایل رسانه ای داده شده ایجاد می کند، دارد. هر استخراج کننده نام گذاری شده است (برای کمک به اشکال زدایی) و نسخه بندی شده است تا نشان دهد کدام استخراج کننده جدیدترین است.
چارچوب رسانه ای به طور خودکار همه فایل های استخراج کننده .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
. API و پیاده سازی لایه نازک.external/exoplayer/
. Exoplayer منابع کلمه به کلمه که MediaParser بر روی آنها ساخته شده است.
MediaParser API را نمی توان سفارشی کرد. برای تست MediaParser، از تست های cts/tests/tests/mediaparser/
استفاده کنید.
کدک های رسانه ای
ماژول Media Codecs شامل اجزای نرم افزار Codec2 قابل به روز رسانی است. پشتیبانی از سفارشی سازی بین نسخه ها متفاوت است:
در اندروید 11 یا بالاتر (بهویژه Google Play System Update v292100200 )، میتوانید پارامترها را برای تخصیص حافظه ION سفارشی کنید (برای جزئیات به زیر مراجعه کنید).
در اندروید 9 یا پایینتر، API کدک OMX قابل بهروزرسانی نیست، اما همچنان میتوانید از آن در پارتیشن فروشنده استفاده کنید.
تخصیص حافظه ION
در Android 11 یا بالاتر و Google Play System Update v292100200 یا بالاتر، میتوانید پارامترهای زیر را برای تخصیص حافظه ION سفارشی کنید.
پارامتر | مقدار پیش فرض | توضیحات |
---|---|---|
heapMask | 0xFFFFFFFF | همه انواع پشته مجاز است. |
allocFlags | 0 | هیچ پرچمی تنظیم نشده است. |
minAlignment | 0 | بدون تراز. |
برای نادیده گرفتن پارامترها:
یک سرویس پیش فرض
android.hardware.media.c2
ثبت کنید و پارامترهای استفاده سفارشی ION را ارائه دهید.برای ایجاد یک سرویس جدید، فایل Frameworks/av/media/codec2/hidl/services/vendor.cpp را در مخزن خود کپی کنید، سپس در صورت نیاز
StoreImpl::Interface::SetIonUsage()
تغییر دهید.برای استفاده مجدد از فرآیند
media.codec
(OMX)، کلاس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 را بارگیری می کنند که حاوی جاوا و کد بومی است.
شکل 1. جریان به روز رسانی جزء رسانه
پس از اینکه فریم ورک بسته APEX را نصب کرد، دستگاه تصویر دیسک و فرآیندهای سیستم رسانه ( media.extractor
و media.codec
) را مجددا راهاندازی و نصب میکند که ماژولهای بهروز شده را از نقطه نصب بارگیری میکنند.