ضبط إعدادات العرض

يتضمّن نظام التشغيل Android واجهات برمجة تطبيقات تتيح للتطبيقات ضبط إعدادات العرض على الأجهزة المتوافقة. على نظام التشغيل Android TV، يمكن للتطبيقات الاستفادة من ذلك لضمان عرض المحتوى بأفضل تنسيق ممكن، وذلك من خلال مطابقة معدل عرض اللقطات وملف الألوان للحصول على تجربة مشاهدة مثالية.

مطابقة عدد اللقطات في الثانية للمحتوى

عندما لا يتطابق عدد اللقطات في الثانية للفيديو مع معدّل تحديث الشاشة، قد يواجه المستخدمون تشوّهات غير مرغوب فيها في الحركة ناتجة عن تحويل عدد اللقطات في الثانية. ويظهر ذلك بشكل خاص أثناء لقطات التحريك البطيء. لهذا السبب، استخدِم واجهة برمجة التطبيقات Surface.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"