调整显示设置

Android 包含一些 API,可让应用在受支持的硬件上调整显示设置。在 Android TV 操作系统上,应用可以利用此功能,通过匹配帧速率和颜色配置文件来确保内容以尽可能最佳的格式显示,从而获得理想的观看体验。

匹配内容帧速率

如果视频的帧速率与显示屏的刷新率不匹配,用户可能会因帧速率转换而遇到令人不快的运动抖动伪影。在缓慢的平移镜头中,这一点尤为明显。因此,请使用 Surface.setFrameRate API 向框架通知内容的帧速率,并指明视频 内容是否符合无缝 帧速率 切换的条件。

如需了解详情,请阅读帧速率指南

匹配首选图片配置文件

在 Android 16 中,开发者可以使用 MediaQuality API 来控制图片配置文件。

以下是一些示例场景:

  • 对于采用更宽动态范围进行母带处理的电影和电视连续剧,开发者可能会请求电影制作人模式,以准确显示创作者希望呈现的内容。具有更高色彩准确度的电影配置文件会突出阴影中的细微细节,而不是提高亮度。
  • 通常采用窄动态范围进行母带处理并在白天观看的体育赛事直播可以受益于优先考虑亮度而非色彩准确度的配置文件。
  • 游戏开发者可以请求具有最少图像处理的低延迟配置文件,以便玩家可以从显示屏获得最佳性能。
createPictureProfile方法。

选择系统图片配置文件

在选择图片配置文件之前,请务必先验证设备是否支持该配置文件。

以下代码段展示了如何使用 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"