音频输出 Cluster(AudioOutput)

Cluster ID: 0x050B  |  所在 Endpoint: 媒体端点(电视、AV 接收器、Soundbar 等)

AudioOutput 负责管理设备的音频输出目的地 —— HDMI ARC、蓝牙、光纤、耳机、内置扬声器等。 用户可以通过它查询设备有哪些音频输出、当前正在使用哪个、切换到指定输出,以及为输出源自定义名称。 它是智能电视、AV 接收器、Soundbar 等媒体设备的常见 Cluster 之一,与 MediaInput 互为输入/输出的对应关系。

NameUpdates(NU)特性

AudioOutput Cluster 定义了一个 NameUpdates(NU) Feature。 启用后,控制端可以通过 RenameOutput 命令为输出源自定义名称 (例如把"Bluetooth"改成"HomePod")。未启用时,输出源名称由设备固定,不可修改。

命令(Commands)

AudioOutput Cluster 共有 2 个命令。SelectOutput 用于切换音频输出目的地, RenameOutput 允许用户为输出源自定义名称(需要 NU 特性)。 点击下方表格中的命令 ID 可跳转到对应的详细说明。

ID 名称 说明 所需特性
0x00 SelectOutput 切换到指定音频输出 无
0x01 RenameOutput 重命名指定输出源 NU

SelectOutput —— 切换音频输出(0x00)

将设备的音频输出切换到指定目的地。Index 必须是 OutputList 中某个 OutputInfoStruct 的 Index 值,否则设备会返回错误。 执行成功后,CurrentOutput 属性会更新为指定的 Index 值。

参数类型说明
Index uint8 目标输出源的索引值,必须存在于 OutputList 中
使用场景

用户在手机 App 上选择"HDMI ARC",App 读取 OutputList 获取该输出源的 Index 值, 然后发送 SelectOutput 命令。电视将音频切换到 HDMI ARC 回传,CurrentOutput 随之更新。

RenameOutput —— 重命名输出源(0x01)

为指定的输出源设置一个自定义名称。修改后,OutputList 中对应条目的 Name 字段会更新。 此命令需要设备启用 NU(NameUpdates) 特性。

参数类型说明
Index uint8 要重命名的输出源索引,必须存在于 OutputList 中
Name string 新的输出源名称
// RenameOutput 命令示例
// 将 Index=2 的输出源重命名为 "HomePod"
{
  "Index": 2,
  "Name": "HomePod"
}
// 执行后 OutputList 中 Index=2 的 Name 变为 "HomePod"
使用场景

用户连接了蓝牙音箱,但设备默认显示"Bluetooth"不够直观。 通过 App 发送 RenameOutput,将 Index=2 的输出源重命名为"HomePod"。 之后 OutputList 中该条目的 Name 会变为"HomePod",UI 上也会显示新名称。

属性详解

AudioOutput Cluster 共有 2 个属性。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。

ID 名称 类型 说明
0x0000 OutputList list<OutputInfoStruct> 设备所有音频输出源的列表
0x0001 CurrentOutput uint8 当前选中的音频输出源索引

音频输出状态(0x0000, 0x0001)

描述设备当前可用的音频输出列表和当前选中的输出源。

ID 名称 类型 说明
0x0000 OutputList(输出源列表) list<OutputInfoStruct> 设备声明的全部可用音频输出目的地,每个元素是一个 OutputInfoStruct。列表内容反映设备实际的音频输出接口,每个 Index 值唯一。当用户通过 RenameOutput 修改名称后,对应条目的 Name 会更新
0x0001 CurrentOutput(当前输出源) uint8 当前选中的音频输出索引。该值始终指向 OutputList 中某个 OutputInfoStruct.Index。通过 SelectOutput 命令改变,也可能由用户通过遥控器或设备面板切换
订阅变化

控制端应订阅 CurrentOutput 属性的变化,以便在用户通过遥控器或设备面板切换音频输出时同步 App 界面。 同样,如果设备支持 NU 特性,也应订阅 OutputList 的变化以获取最新的输出源名称。

结构体定义

AudioOutput Cluster 使用一个结构体来描述输出源信息。

OutputInfoStruct

描述一个音频输出源的完整信息,包括索引、类型和名称。

字段 类型 说明
Index uint8 输出源的唯一索引,用于 SelectOutput 和 RenameOutput 命令的定位
OutputType OutputTypeEnum 输出源的接口类型(见下方枚举)
Name string 输出源的显示名称,如 "HDMI ARC"、"HomePod"。启用 NU 特性后可通过 RenameOutput 修改
与 MediaInput 的 InputInfoStruct 对比

OutputInfoStruct 只有 3 个字段(Index、OutputType、Name),比 MediaInput 的 InputInfoStruct 少了一个 Description 字段。 音频输出源的信息相对简单,通常名称本身就足以区分不同输出。

OutputTypeEnum

定义音频输出源的接口类型。共 6 个枚举值,涵盖常见的音频输出方式。 控制端可据此在 UI 上展示对应的图标或分类。

0
HDMI HDMI —— 通过 HDMI ARC/eARC 回传音频
1
BT 蓝牙 —— 蓝牙无线音频输出
2
Optical 光纤 —— 光纤数字音频输出(TOSLINK/SPDIF)
3
Headphone 耳机 —— 3.5mm 耳机插孔或 USB 耳机
4
Internal 内置 —— 设备内置扬声器
5
Other 其他 —— 以上类型未涵盖的输出方式

Feature 位图

AudioOutput Cluster 通过 FeatureMap(0xFFFC)声明设备支持的可选能力:

Bit 0
NU(NameUpdates) 名称更新 —— 启用后支持 RenameOutput 命令,允许用户为输出源自定义名称
何时启用 NU

支持用户自定义输出源名称的设备应启用此特性 —— 例如用户希望把"Bluetooth"改成蓝牙音箱的具体名称。 如果设备的输出源名称是出厂固定的且不支持修改,则不启用 NU。

示例数据

一台智能电视的 AudioOutput Cluster 读取结果 —— 当前音频输出到 HDMI ARC,共有 4 个输出源:

{
  // --- 当前输出源 ---
  "0x0001": 1,                   // CurrentOutput = 1(当前选中 HDMI ARC)

  // --- 输出源列表 ---
  "0x0000": [                    // OutputList
    {
      "Index": 0,
      "OutputType": 4,            // Internal(内置扬声器)
      "Name": "TV Speaker"
    },
    {
      "Index": 1,
      "OutputType": 0,            // HDMI(HDMI ARC/eARC 回传)
      "Name": "HDMI ARC"
    },
    {
      "Index": 2,
      "OutputType": 1,            // BT(蓝牙音箱)
      "Name": "Bluetooth"
    },
    {
      "Index": 3,
      "OutputType": 2,            // Optical(光纤输出)
      "Name": "Optical Out"
    }
  ]
}
开发提示

控制端显示音频输出切换 UI 时,应先读取 OutputList (0x0000) 获取完整列表, 再读取 CurrentOutput (0x0001) 高亮当前选中项。 可以根据 OutputType 为不同接口类型显示不同图标(如蓝牙图标、耳机图标等), 提升用户识别效率。

常见场景

场景 1:App 切换电视音频输出
  1. 读取 OutputList (0x0000),获取所有输出源(Index、Name、OutputType)
  2. 读取 CurrentOutput (0x0001),高亮当前选中的输出源
  3. 在 UI 上展示输出源列表,根据 OutputType 显示对应图标(蓝牙、HDMI、耳机等)
  4. 用户点击目标输出源,发送 SelectOutput (0x00),Index 设为该输出源的索引值
  5. 订阅 CurrentOutput 属性变化,确认切换成功后更新 UI
场景 2:用户自定义输出源名称
  1. 检查设备的 FeatureMap (0xFFFC),确认支持 NU(Bit 0 = 1)
  2. 读取 OutputList (0x0000),展示输出源列表
  3. 用户长按某个输出源(如 Index=2,当前名称"Bluetooth"),弹出重命名输入框
  4. 用户输入新名称"HomePod",发送 RenameOutput (0x01),Index=2,Name="HomePod"
  5. 订阅 OutputList 变化,确认名称更新后刷新 UI

注意:如果 FeatureMap 不包含 NU 特性,UI 上不应显示重命名入口, 发送 RenameOutput 命令会被设备拒绝。