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

يتضمّن 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"