調整顯示設定

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"