يتضمّن Android واجهات برمجة تطبيقات تتيح للتطبيقات ضبط إعدادات الشاشة على الأجهزة المتوافقة. على نظام التشغيل Android TV، يمكن للتطبيقات الاستفادة من ذلك لضمان عرض المحتوى بأفضل تنسيق ممكن، وذلك من خلال مطابقة معدل عرض اللقطات وملف الشخصي للألوان للحصول على تجربة مشاهدة مثالية.
مطابقة عدد اللقطات في الثانية للمحتوى
عندما لا يتطابق عدد اللقطات في الثانية للفيديو مع معدّل تحديث الشاشة،
قد يلاحظ المستخدمون اهتزازًا غير سارّ للحركة نتيجة عملية تحويل عدد اللقطات في الثانية. ويظهر ذلك بشكل خاص أثناء لقطات العرض البطيء. لهذا السبب،
من المهم استخدام واجهة برمجة التطبيقات
SurfaceControl.Transaction.setFrameRate()
لإعلام إطار العمل بمعدّل عرض اللقطات للمحتوى وللإشارة
إلى ما إذا كان محتوى الفيديو مؤهلاً لتبديل معدّل عرض اللقطات بشكل غير سلس.
لمزيد من المعلومات، يُرجى الاطّلاع على دليل معدّل عرض اللقطات.
مطابقة الملفات الشخصية للصور المفضّلة
تتيح MediaQuality 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)
}
إذا لم تكن بحاجة إلى الاستعلام عما إذا كان الملف الشخصي متاحًا، يمكن
تقديم الملفات الشخصية مباشرةً من خلال معرّفها إلى 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"