Android 包含 API,可讓應用程式在支援的硬體上調整顯示設定。在 Android TV OS 上,應用程式可以利用這項功能,透過比對影格速率和色彩設定檔,確保內容以最佳格式顯示,進而提供最佳觀看體驗。
採用內容影格速率
如果影片的幀率與螢幕的更新率不符,使用者可能會因為幀率轉換而看到令人不悅的運動抖動影像。這在慢速平移鏡頭中特別明顯。因此,請務必使用 SurfaceControl.Transaction.setFrameRate()
API 通知架構內容的影格速率,並指出影片內容是否符合非無縫影格速率切換的資格。
詳情請參閱影格速率指南。
比對偏好的相片設定檔
Android 16 中的 MediaQuality API 可讓開發人員控管相片設定檔。
以下列舉幾個情境範例:
- 如果電影和電視影集採用更廣泛的動態範圍進行後製,開發人員可以要求使用電影製作人模式,以便準確顯示內容,呈現創作者想要的效果。色彩準確度更高的電影設定檔可突顯陰影中的細微細節,並提高亮度。
- 直播體育賽事通常會以較窄的動態範圍進行調色,並在日光下觀看,因此使用偏好亮度而非色彩準確度的設定檔,有助於提升觀賞體驗。
- 遊戲開發人員可以要求低延遲時間設定檔,並以最少的圖像處理方式,讓玩家在螢幕上獲得最佳效能。
選取系統相片設定檔
在選取相片設定檔前,請務必先確認裝置是否支援相片設定檔。
下列程式碼片段說明如何使用 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)
}
如果您不需要查詢設定檔是否可用,可以使用 MediaFormat.KEY_PICTURE_PROFILE_INSTANCE
,直接透過 ID 將設定檔提供給 MediaCodec。
雖然支援的設定檔可能因裝置而異,但您可以考慮比對下列已知的系統設定檔 ID:
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"