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"