Android شامل API هایی است که به برنامه ها اجازه می دهد تنظیمات نمایش را روی سخت افزار پشتیبانی شده تنظیم کنند. در سیستمعامل Android TV، برنامهها میتوانند از این مزیت استفاده کنند تا اطمینان حاصل کنند که محتوا در بهترین قالب ممکن نمایش داده میشود، با تطبیق نرخ فریم و نمایه رنگ برای تجربه تماشای ایدهآل.
مطابقت با نرخ فریم محتوا
هنگامی که نرخ فریم یک ویدیو با نرخ تازه سازی نمایشگر مطابقت ندارد، کاربران می توانند با تغییر نرخ فریم، حرکات ناخوشایندی را تجربه کنند. این امر به ویژه در هنگام عکسبرداری با حرکت آهسته قابل مشاهده است. به همین دلیل، مهم است که از SurfaceControl.Transaction.setFrameRate()
API برای اطلاع دادن به فریمورک در مورد نرخ فریم محتوا و نشان دادن اینکه آیا محتوای ویدیو واجد شرایط سوئیچ نرخ فریم بدون درز است یا خیر، استفاده کنید.
برای اطلاعات بیشتر، راهنمای نرخ فریم را بخوانید.
مطابقت با نمایه های تصویر ترجیحی
MediaQuality API در اندروید 16 به توسعه دهندگان اجازه می دهد تا کنترل پروفایل های تصویر را در دست بگیرند.
برخی از سناریوهای نمونه عبارتند از:
- برای فیلمها و سریالهای تلویزیونی که با دامنه دینامیکی وسیعتری تسلط دارند، توسعهدهندگان ممکن است از حالت Filmmaker درخواست کنند تا محتوا را دقیقاً همانطور که سازنده در نظر دارد نمایش دهد. نمایه سینما با دقت رنگ بیشتر جزئیات ظریف را در سایه ها به نفع افزایش روشنایی به نمایش می گذارد.
- رویدادهای ورزشی زنده، که اغلب با محدوده دینامیکی باریک تسلط دارند و در نور روز تماشا میشوند، میتوانند از نمایهای بهره ببرند که روشنایی را بر دقت رنگ ترجیح میدهد.
- توسعه دهندگان بازی می توانند یک نمایه با تاخیر کم با حداقل پردازش تصویر درخواست کنند تا بازیکنان بتوانند بهترین عملکرد را از صفحه نمایش خود داشته باشند.
انتخاب نمایه تصویر سیستم
قبل از انتخاب نمایه تصویر، مهم است که ابتدا تأیید کنید که دستگاه از آن پشتیبانی می کند.
قطعه زیر نحوه استفاده از 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)
}
اگر نیازی به پرس و جو ندارید که آیا یک نمایه در دسترس است، نمایهها را میتوان مستقیماً با شناسه آنها در MediaCodec با استفاده از MediaFormat.KEY_PICTURE_PROFILE_INSTANCE
ارائه کرد.
در حالی که نمایه های پشتیبانی شده ممکن است بر اساس دستگاه متفاوت باشد، می توانید با شناسه های نمایه سیستم شناخته شده زیر مطابقت داشته باشید:
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"