动态条形音箱模式

借助 Android 14 框架支持,OEM 可以将机顶盒 (STB) 和 OTT(Over-the-Top,互联网电视)设备与内置或连接的扬声器配置为连接设备的条形音箱。Android 14 中的动态条形音箱模式 (DSM) 支持条形音箱的 HDMI 消费电子控制 (CEC) 属性,例如音频回传通道 (ARC) 和系统音频控制。

此功能仅面向 Android TV CEC 播放设备。

要求

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

设备要求

要支持 DSM,STB 或 OTT 设备必须满足以下要求:

  • 设备必须运行 Android 14。
  • 启用 DSM 后,设备的行为必须类似于遵循 HDMI CEC 规范(例如 ARC)的条形音箱。
  • 设备必须能够通过内置或连接的扬声器播放声音。
  • 当设备不是活动源时,必须暂停设备上的所有媒体,以限制其功耗。

系统界面要求

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

  • UI 标签必须包含对 ARC音频回传通道 (ARC) 的引用。
  • UI 必须告知用户将设备连接到电视的 ARC 端口以建立 ARC 连接。
  • UI 必须告知用户,如果 HDMI 网络中连接了另一个条形音箱或音频视频接收器 (AVR),则该功能可能无法按预期工作。
  • UI 必须告知用户,切换设置时屏幕可能会闪烁。
  • 如果设备没有内置扬声器,则必须默认禁用 DSM。

作为最佳实践,我们建议使用显示和声音菜单作为用户设置的位置,以启用或禁用 ARC,如系统界面实现中所示。

框架实现

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

根据系统界面上的用户输入,HdmiControlManagerCEC_SETTING_NAME_SOUNDBAR_MODE 设置为 SOUNDBAR_MODE_ENABLEDSOUNDBAR_MODE_DISABLEDCEC_SETTING_NAME_SOUNDBAR_MODE 的默认值设置为 SOUNDBAR_MODE_DISABLED

HdmiControlService 监听 CEC_SETTING_NAME_SOUNDBAR_MODE 设置的更改以执行以下操作:

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

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

    /**
     * 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.
     *
     * 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.
     *
     * 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.xml 中,保持 config_cecSoundbarModeEnabled_defaultconfig_cecSoundbarModeDisabled_default 的 RRO 值不变,以便默认禁用该功能。

  4. 确保设备具有内置或连接的扬声器来播放音频,并修改音频策略配置

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

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

  7. 对于调试,请使用以下 adb 命令来打开或关闭条形音箱功能(1 表示打开,0 表示关闭):

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

系统界面实现

本节介绍了一个推荐的模拟 UI 流程,用于打开和关闭 DSM。“音频输出”设置位于“显示和声音”菜单下,如图 1 所示。

dsm_audio_output

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

为了使 DSM 正常工作,必须打开“启用 HDMI-CEC”设置。只有在启用 HDMI-CEC 后,才能启用 ARC 设置。如果禁用 HDMI-CEC,则 ARC 设置不可用且处于禁用状态,如图 2 所示。在以下 UI 流程中,当用户在“显示和声音”菜单中关闭“启用 HDMI-CEC”设置并选择“家庭扬声器”时,ARC 设置将被禁用。用户可以通过启用“启用 HDMI-CEC”来启用“播放电视音频”设置。

dsm_ui_disable_arc

图 2. 禁用的 ARC 选项的 UI。

当启用 HDMI-CEC 设置后,用户可以使用“音频输出”下的 ARC 设置来打开和关闭 DSM。要打开 DSM,用户可以按照图 3 中的 UI 流程操作。在以下 UI 流程中,要启用条形音箱模式,用户选择“家庭扬声器”,然后选择并确认 ARC 设置。要关闭 DSM,用户可以关闭 ARC 设置。

dsm_ui_enable_arc

图 3. 用于启用 DSM 的 UI。

验证

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

手动验证

使用以下场景手动验证预期行为:

  • ARC 设置已启用
    • 电视静音。
    • 电视声音被路由到设备的扬声器。
  • ARC 设置已禁用
    • 电视停止将音频路由到设备。
    • 电视开始播放音频。
  • ARC 设置已启用,并且设备连接到电视的非 ARC 端口
    • 设备不播放电视的声音。
  • ARC 设置已启用,并且在设备连接之前,逻辑地址 5 已被另一个设备使用
    • 设备的行为类似于纯播放设备,而不是条形音箱。
  • ARC 设置已启用,逻辑地址 5 正由设备使用,并且另一个音频系统已连接到网络
    • 设备的条形音箱行为没有变化。
  • ARC 设置已启用,逻辑地址 5 正由连接到非 ARC 端口的设备使用,并且另一个音频系统已连接到 ARC 端口
    • 由于第二个音频系统使用未注册的逻辑地址,因此未与电视建立 ARC 连接。
  • ARC 设置已启用,并且设备已热插拔
    • 设备遵循与启用设置时相同的正常行为。

CTS 验证

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

尽管不是认证要求,但在启用条形音箱设置的情况下运行 CtsHdmiCecHostTestCases 以验证您的实现。

请参阅 Android TV 设备的 CEC CTS 测试,以运行 HDMI CEC 的 Android CTS 测试。