Android 包含 API,可讓應用程式在支援的硬體上調整顯示設定。在 Android TV OS 上,應用程式可以利用這項功能,確保內容以最佳格式顯示,並配合影格速率和色彩設定檔,提供理想的觀看體驗。
採用內容影格速率
如果影片的影格率與螢幕的刷新率不符,使用者可能會在影格率轉換時,看到不流暢的動作顫動。在緩慢平移的鏡頭中,這種情況尤其明顯。因此,請使用 Surface.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"