媒体质量框架

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 使用该接口将硬件级声音调整通知给框架。