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