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