动态条形音箱模式

本文最后更新于 2024年4月26日 晚上

借助 Android 14 框架支持,可以将内置或连接扬声器的机顶盒 (STB) 和 OTT 服务设备配置为已连接设备的条形音箱。Android 14 中的动态条形音箱模式 (DSM) 支持条形音箱的 HDMI 消费类电子产品控制 (CEC) 属性,例如音频返回通道 (ARC) 和系统音频控件。

此功能仅定位到 Android TV CEC 播放设备。

注意:DSM 的 Android 实现不支持增强型音频返回通道 (eARC) Rx 功能。DSM 提供的 ARC 支持可用作 eARC 的回退实现。我们建议原始设备制造商 (OEM) 先采用 DSM,然后再实现 eARC Rx。

要求

如需采用条形音箱功能,OEM 必须满足本节中列出的设备和系统界面要求。

设备要求

如需支持 DSM,机顶盒/OTT 设备必须满足以下要求:

  • 设备必须搭载 Android 14。
  • 启用 DSM 后,设备的行为方式应符合 HDMI CEC 规范(例如 ARC)。
  • 设备必须能够在内置或连接的音响设备上播放声音。
  • 当设备不是活跃来源时,必须在设备上暂停所有媒体,从而限制其功耗。

注意:如需在电视扬声器上恢复声音,我们建议在扬声器断开连接时释放逻辑地址 5。您可以保留条形音箱设置的值,以便用户稍后重新连接扬声器。

系统界面要求

为了支持 DSM,OEM 在设计系统界面时必须满足以下要求:

  • 界面标签必须包含对 ARC音频返回通道 (ARC) 的引用。
  • 界面必须通知用户将设备连接到 TV 的 ARC 端口,以建立 ARC 连接。
  • 如果通过 HDMI 网络连接了其他条形音箱或音频/视频接收器 (AVR),界面必须通知用户该功能可能无法正常运行。
  • 此界面必须通知用户在切换设置时屏幕可能会闪烁。
  • 如果设备没有内置扬声器,必须默认停用 DSM。

最佳实践:我们建议将“显示和声音”菜单用作用户设置来启用或停用 ARC,如 SysUI 实现中所示。

框架实现

Android 框架中存在 CEC 条形音箱功能的实现和逻辑地址 5 的动态分配。在启用条形音箱设置的情况下,框架会分配逻辑地址,以使设备动态地成为条形音箱。停用条形音箱设置后,框架会取消分配逻辑地址。

HdmiControlManager 会根据用户在系统界面上的输入,将 CEC_SETTING_NAME_SOUNDBAR_MODE 设置为 SOUNDBAR_MODE_ENABLEDSOUNDBAR_MODE_DISABLEDCEC_SETTING_NAME_SOUNDBAR_MODE 的默认值为 SOUNDBAR_MODE_DISABLED

HdmiControlService 会监听 CEC_SETTING_NAME_SOUNDBAR_MODE 设置中的变更以执行以下操作:

  • 验证本地播放设备是否存在以及是否支持 ARC 属性。
  • 触发逻辑地址分配以添加或移除本地音频设备。
  • 如果设备热插拔,请确保保留设置的状态。

请参阅以下声明示例,了解如何设置和获取条形音箱模式的状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 /**
* Name of a setting deciding whether the Soundbar mode feature is enabled.
* Before exposing this setting make sure the hardware supports it, otherwise, you may
* experience multiple issues.
*
* @see HdmiControlManager#setSoundbarMode(int)
*/
public static final String CEC_SETTING_NAME_SOUNDBAR_MODE = "soundbar_mode";
/**
* Soundbar mode feature enabled.
*/
public static final int SOUNDBAR_MODE_ENABLED = 1;
/**
* Soundbar mode feature disabled.
*/
public static final int SOUNDBAR_MODE_DISABLED = 0;

/**
* Set the status of Soundbar mode feature.
*
* <p>This allows to enable/disable Soundbar mode on the playback device.
* The setting's effect will be available on devices where the hardware supports this feature.
* If enabled, an audio system local device will be allocated and try to establish an ARC
* connection with the TV. If disabled, the ARC connection will be terminated and the audio
* system local device will be removed from the network.
*/
public void setSoundbarMode(@SoundbarMode int value) {
}

/**
* Get the current status of Soundbar mode feature.
*
* <p>Reflects whether Soundbar mode is currently enabled on the playback device.
* If enabled, an audio system local device will be allocated and try to establish an ARC
* connection with the TV. If disabled, the ARC connection will be terminated and the audio
* system local device will be removed from the network.
*/
public int getSoundbarMode() {}

OEM 实现

如需支持动态条形音箱功能,OEM 必须确保硬件支持该功能。OEM 必须配置设备实现系统界面,以提供用户输入所需的界面。

设备实现

如需在设备上支持条形音箱功能,请执行以下操作:

  1. 启动搭载 Android 14 的播放设备。

  2. 在驱动程序中实现 HDMI ARC 端口。

  3. 不要更改 config.xmlconfig_cecSoundbarModeEnabled_defaultconfig_cecSoundbarModeDisabled_default 的 RRO 值,这样该功能会默认保持停用状态。

    注意:当 HDMI 网络中已存在另一个占用逻辑地址 5 的音频系统时,此功能会默认处于停用状态,以避免竞态条件。OEM 不得更改默认值。

  4. 确保设备内置或连接了扬声器来播放音频,然后修改音频政策配置

  5. 将系统属性 persist.sys.hdmi.property_arc_support 设置为 true,以表明支持 ARC。

  6. 系统界面中公开用于切换条形音箱模式的设置。

如需进行调试,请使用以下 adb 命令开启或关闭条形音箱功能(开启 1,关闭 0)。

1
adb shell cmd hdmi_control cec_setting set soundbar_mode <1/0>

SysUI 实现

本部分介绍了启用和停用 DSM 的推荐模拟界面流程。音频输出设置位于显示和声音菜单下,如下所示:在图 1 中:

dsm_audio_output

图 1. 显示和声音菜单下的音频输出设置。

为了使 DSM 正常运行,必须开启启用 HDMI-CEC 设置。只有启用 HDMI-CEC 时,才可以启用 ARC 设置。如果停用 HDMI-CEC,ARC 设置会灰显并停用,如图 2 所示。在以下界面流程中,如果用户在显示和声音菜单中关闭启用 HDMI-CEC 设置并选择 Home 音箱ARC 设置将停用。用户可通过启用启用 HDMI-CEC 来启用 Play 电视音频设置。

dsm_ui_disable_arc

图 2. 停用 ARC 选项的界面。

启用 HDMI-CEC 设置后,用户可以使用音频输出下的 ARC 设置来开启和关闭 DSM。要开启 DSM,用户需遵循图 3 中的界面流程。在以下界面流程中,如需启用条形音箱模式,用户可以选择 Home 音箱,然后选择并确认 ARC 设置。如需关闭 DSM,用户可以关闭 ARC 设置。

dsm_ui_enable_arc

图 3. 用于启用 DSM 的界面。

验证

OEM 可以执行音频测试,以确保播放设备的扬声器播放来自电视或连接到电视面板的其他设备的声音。

手动验证

请根据以下场景手动验证预期行为:

  • 已启用 ARC 设置:

    • 电视静音。
    • TV 声音会路由到设备的扬声器。
  • 已停用 ARC 设置:

    • TV 停止将音频路由到设备。
    • TV 会开始播放音频。
  • 启用 ARC 设置,并将设备连接到电视的非 AAR 端口:

    • 设备不会播放电视的声音。
  • 启用 ARC 设置,并且在连接设备之前,其他设备正在使用逻辑地址 5:

    • 设备的行为方式是纯粹的播放设备,而非条形音箱。
  • 启用 ARC 设置,设备使用了逻辑地址 5,并且网络中连接了另一个音频系统:

    • 设备条形音箱的行为没有变化。
  • 启用 ARC 设置,逻辑地址 5 已由连接到非 ARC 端口的设备使用,另一个音频系统已连接到 ARC 端口:

    • 未针对第二个音频系统与电视建立 ARC 连接,因为它使用未注册的逻辑地址。
  • 已启用 ARC 设置,并且设备已热插拔:

    • 启用该设置后,设备会遵循正常行为。

CTS 验证

条形音箱设置停用时,必须通过 CtsHdmiCecHostTestCasesCtsHdmiCecHostTestCases 测试套件中的 HdmiCecSoundbarModeTest.java 测试用于测试 DSM 功能。

虽然不是认证要求,但在启用条形音箱设置的情况下运行 CtsHdmiCecHostTestCases 即可验证您的实现效果。

如需针对 HDMI CEC 运行 Android CTS 测试,请参阅针对 Android TV 设备的 CEC CTS 测试

转载自Android官网,原文地址: https://source.android.com/docs/core/audio/soundbar?hl=zh-cn


动态条形音箱模式
https://www.shangyexin.com/2024/09/08/audio-soundbar/
作者
Yasin
发布于
2024年9月8日
许可协议