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