Android شامل میاناهای برنامهسازی کاربردی است که به برنامهها اجازه میدهد تنظیمات نمایشگر را در سختافزارهای پشتیبانیشده تغییر دهند. در سیستمعامل Android TV، برنامهها میتوانند از این ویژگی استفاده کنند تا مطمئن شوند محتوا با مطابقت دادن نرخ فریم و نمای رنگی در بهترین قالب ممکن نمایش داده میشود و تجربه تماشای ایدهآلی ارائه میشود.
مطابقت دادن نرخ فریم محتوا
وقتی نرخ فریم ویدیو با نرخ بازآوری نمایشگر مطابقت نداشته باشد،
کاربران ممکن است مصنوعات لرزش ناخوشایندی را از تبدیل نرخ فریم تجربه کنند. این امر بهویژه در نماهای آهسته قابلمشاهده است. به همین دلیل، از Surface.setFrameRate API برای اطلاعرسانی به چارچوب درباره نرخ فریم محتوا و برای نشان دادن اینکه آیا محتوای ویدیو برای نرخ فریم غیریکپارچه واجدشرایط است یا نه استفاده کنید.
برای اطلاعات بیشتر، راهنمای نرخ فریم را بخوانید.
نمایههای عکس برگزیده را مطابقت دهید
«میانای برنامهسازی کاربردی کیفیت رسانه» در Android 16 به توسعهدهندگان امکان میدهد بر نمایههای تصویر کنترل داشته باشند.
برخیاز سناریوهای نمونه عبارتاند از:
- برای فیلمها و سریالهای تلویزیونی که با محدوده پویای گستردهتر تسلط یافتهاند، توسعهدهندگان ممکن است حالت «فیلمساز» را درخواست کنند تا محتوا را دقیقاً همانگونه که محتواساز درنظر داشته است نمایش دهند. نمایه سینمایی با دقت رنگ بیشتر جزئیات ظریف را در سایهها به نفع افزایش روشنایی آشکار میکند.
- رویدادهای ورزشی زنده که اغلب با محدوده دینامیکی باریک تسلط مییابند و در نور روز تماشا میشوند، میتوانند از نمایهای که روشنایی را بر دقت رنگ ترجیح میدهد بهرهمند شوند.
- توسعهدهندگان بازی میتوانند نمایه تأخیر کم با حداقل پردازش تصویر درخواست کنند تا بازیکنان بتوانند بهترین عملکرد را از نمایشگر خود دریافت کنند.
انتخاب نمایه تصویر سیستم
قبلاز انتخاب نمایه تصویر، ابتدا باید تأیید کنید که دستگاه از آن پشتیبانی میکند.
تکهکد زیر نشان میدهد که چگونه از
getAvailablePictureProfiles برای پُرسمان کردن همه
نمایههای تصویر پشتیبانیشده و اعمال کردن نمایه ورزشی استفاده کنید:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) { val mediaQualityManager: MediaQualityManager = context.getSystemService(MediaQualityManager::class.java) val profiles = mediaQualityManager.getAvailablePictureProfiles(null) for (profile in profiles) { // If we have a system sports profile, apply it to our media codec if (profile.profileType == PictureProfile.TYPE_SYSTEM && profile.name == NAME_SPORTS ) { val bundle = Bundle().apply { putParcelable(MediaFormat.KEY_PICTURE_PROFILE_INSTANCE, profile) } mediaCodec.setParameters(bundle) } } }
برای دریافت نمایه خاص براساس نام، از
getPictureProfile استفاده کنید:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) { val profile = mediaQualityManager.getPictureProfile( PictureProfile.TYPE_SYSTEM, NAME_SPORTS, null ) }
اگر نیازی به پُرسمان درباره دردسترس بودن نمایه ندارید، نمایهها را میتوان بااستفاده از
MediaFormat.KEY_PICTURE_PROFILE_INSTANCE مستقیماً براساس شناسهشان به MediaCodec ارائه کرد.
اگرچه نمایههای پشتیبانیشده ممکن است بسته به دستگاه متفاوت باشد، میتوانید با شناسههای نمایه سیستم شناختهشده زیر مطابقت دهید:
const val NAME_STANDARD: String = "standard" const val NAME_VIVID: String = "vivid" const val NAME_SPORTS: String = "sports" const val NAME_GAME: String = "game" const val NAME_MOVIE: String = "movie" const val NAME_ENERGY_SAVING: String = "energy_saving" const val NAME_USER: String = "user"