媒体质量框架

Android 16 中针对 Android TV 引入了媒体质量框架,旨在为画质 (PQ) 和音质 (AQ) 调整建立标准化 API。主要目标是为不同 Android TV 设备上的这些调整提供统一的方法。此标准化框架旨在通过提供一组一致的 Android API,简化应用开发者、原始设备制造商 (OEM) 和系统芯片 (SoC) 供应商的开发工作。对于 SoC 供应商而言,它允许 Android 框架处理 PQ 和 AQ 配置,从而减少与不同应用开发者协作的开销。

最终,对于 Google 和 Android 平台,这有助于减少碎片化、提高质量和可伸缩性、提供新功能,并为统一的 AQ/PQ 界面和改进的用户体验奠定基础。

媒体质量框架支持各种用例,以提升电视观看体验。您可以按软件包名称(应用)或按输入源 ID 管理配置文件和设置。此外,配置文件可以由系统应用或许可名单中的应用创建,但只能由其所有者更新或移除。

具体而言,该框架可管理画面和声音配置文件。画面参数的示例包括亮度、对比度和清晰度,而声音参数的示例包括低音和高音。

这些配置文件可应用于各种情境,包括设置全局默认配置文件、使用 MediaCodec 设置流式传输配置文件、为特定媒体应用设置应用默认配置文件,以及为 HDMI 等特定输入源设置电视输入源画面配置文件。该框架还支持状态更改(允许为 HDR 等状态设置不同的参数集)、管理正在处理的有效画面配置文件,以及处理环境背光功能。

Android 团队正在与我们的生态系统合作伙伴合作,以支持媒体质量框架。

组件

媒体质量框架由多个关键组件组成,这些组件在应用层、框架层和硬件层协同工作。

PQ AQ 标准化图表
图 1. 媒体质量框架组件之间的交互。
  • 媒体质量管理器 (SDK API):面向应用的 SDK API,可让应用管理画面和声音配置文件。
  • 媒体质量服务:一种包含核心业务逻辑的系统服务,用于管理配置文件、权限以及与 HAL 的通信。
  • 媒体质量数据库:用于存储所有画面和声音配置的 SQLite 数据库。
  • 媒体质量合约:定义用于应用与框架之间通信的标准参数和数据结构。
  • 媒体质量 HAL:SoC 供应商实现的硬件抽象层,用于将画面和声音配置文件更改传达给底层硬件。

功能

媒体质量框架支持多种功能,可提供灵活而强大的媒体质量管理系统。

个人资料管理

  • 应用管理的配置文件:应用可以创建、更新和删除自己的配置文件,以提供自定义体验。
  • 默认配置文件:系统应用可以为特定应用或电视输入源(例如 HDMI 1)设置默认配置文件。
  • 全局默认配置文件:当未设置任何特定配置文件时,系统会应用此配置文件。

整体工作流程

以下图表展示了常见媒体质量操作的调用序列。

创建和应用图片个人资料

创建图片个人资料
图 2. 创建图片个人资料的序列图。
  1. 系统应用调用 setPictureProfileAllowList() 以授予媒体应用创建配置文件的权限。
  2. 媒体应用注册 PictureProfileCallback 以接收有关个人资料更改的通知。
  3. 媒体应用使用 PictureProfile 对象调用 createPictureProfile()
  4. MediaQualityService 处理请求,将个人资料保存到数据库,并使用注册的回调(onPictureProfileAdded()onError())通知应用成功或失败。

设置每个视频流的画面配置文件

此工作流演示了应用如何在播放期间将特定配置文件应用于其视频内容。

设置流式传输图片个人资料
图 3. 设置每个视频流的画面配置的序列图。
  1. 媒体应用会查询 MediaQualityManager 以获取可用图片配置的列表。
  2. 然后,应用使用 MediaCodec.setParameters 为视频流选择并设置所选的配置文件。
  3. 框架会将此选择项传达给媒体质量 (MQ) HAL,并传递配置文件 ID 及其参数。
  4. 最后,MQ HAL 会将这些参数发送到混合渲染器 HAL,后者会使用指定的画面配置文件来渲染视频流。

设置全局默认配置文件

只有系统应用可以设置全局默认配置文件,该配置文件可作为未分配特定配置文件的任何内容的后备配置文件。

  1. 系统应用从框架中检索可用画面配置的列表。
  2. 然后,应用通过调用 setDefaultPictureProfile(id) 选择其中一个配置文件作为新的全局默认配置文件。
  3. 框架会将相应配置文件的参数发送到媒体质量 HAL,然后由后者应用更改。

媒体质量 SDK API

媒体质量 SDK API 为应用提供了与框架交互所需的工具。主要入口点是 android.media.quality 软件包。

android.media.quality

此软件包包含用于管理媒体质量的主要类。

说明
MediaQualityManager 用于与 MQF 交互的中央类。
PictureProfile 一种数据类,表示特定模式的完整图片参数集。
SoundProfile 用于存储声音参数的数据类。
MediaQualityContract 一个包含所有预定义形参键的常量的类。

MediaQualityManager

主要方法包括:

方法 说明
createPictureProfile(PictureProfile profile) 创建新的图片个人资料。需要特殊权限或将应用添加到许可名单中。
updatePictureProfile(PictureProfile profile) 更新现有图片个人资料。只能由相应配置的创建者调用。
removePictureProfile(String profileId) 删除个人资料。只能由相应配置的创建者调用。
getAvailablePictureProfiles() 返回所有可用画面配置的列表。
setDefaultPictureProfile(String profileId) 设置全局默认图片配置文件。需要 MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE 权限。
registerPictureProfileCallback(PictureProfileCallback cb) 注册一个回调以监听个人资料更改。

PictureProfile 对象

PictureProfile 对象封装了给定图片模式的所有信息。

public final class PictureProfile {
  private String id;
  private int type; // System or Application
  private String name; // e.g., "Movie", "Game"
  private String inputId; // e.g., "HDMI1"
  private String packageName; // e.g., "com.google.android.youtube"
  private PersistableBundle parameters; // Bundle containing all PQ parameters
}

媒体质量 HAL

媒体质量 HAL 是在 hardware/interfaces/tv/mediaquality/aidl/ 中定义的基于 AIDL 的接口。SoC 供应商必须实现此接口,才能在其设备上启用媒体质量框架。HAL 充当 Android 框架中的 MediaQualityService 与底层硬件之间的通信桥梁,负责应用画面和声音调整。

HAL 使用 AIDL Parcelable 管理画面和声音配置文件。这包括从框架接收配置文件更改,以及将硬件级别所做的任何调整通知给框架。

模块

HAL 接口由多个关键 AIDL 文件组成:

HAL 文件 说明
IMediaQuality.aidl 媒体质量服务的主要接口,用于设置监听器和发现硬件功能。
IPictureProfileChangedListener.aidl 一种监听器接口,框架使用该接口将图片配置文件的更改通知给 HAL(具体来说,是混合渲染器 HAL 等组件)。
IPictureProfileAdjustmentListener.aidl HAL 使用的监听器接口,用于将硬件级调整通知给框架,例如当用户直接使用硬件遥控器更改设置时。
PictureParameter.aidl 一个 AIDL 联合,用于定义所有可调整的标准画面参数,例如对比度和清晰度。
PictureProfile.aidl 表示 HAL 层 PictureProfile 对象的 AIDL 可封装对象,包含配置文件 ID 及其关联的参数。
ISoundProfileChangedListener.aidl 框架用于将声音配置文件的更改通知给 HAL 的监听器接口。
ISoundProfileAdjustmentListener.aidl 一种监听器接口,HAL 使用该接口将硬件级声音调整通知给框架。