Android כולל ממשקי API שמאפשרים לאפליקציות לשנות את הגדרות התצוגה בחומרה נתמכת. ב-Android TV OS, אפליקציות יכולות לנצל את התכונה הזו כדי להבטיח שהתוכן יוצג בפורמט הטוב ביותר האפשרי, על ידי התאמה של קצב הפריימים ופרופיל הצבעים לחוויית צפייה אופטימלית.
התאמת התוכן לקצב הפריימים
אם קצב הפריימים של סרטון לא תואם לקצב הרענון של המסך, המשתמשים עלולים לראות תנועה לא חלקה בגלל המרת קצב הפריימים. הדבר בולט במיוחד בצילומי פנינג איטיים. לכן חשוב להשתמש ב-API SurfaceControl.Transaction.setFrameRate()
כדי להודיע למסגרת על קצב הפריימים של התוכן, וכדי לציין אם תוכן הסרטון עומד בדרישות להחלפת קצב פריימים לא חלקה.
מידע נוסף זמין במדריך קצב הפריימים.
התאמה של פרופילים עם תמונות מועדפות
MediaQuality API ב-Android 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"