音频输出 Cluster(AudioOutput)
Cluster ID: 0x050B |
所在 Endpoint: 媒体端点(电视、AV 接收器、Soundbar 等)
AudioOutput 负责管理设备的音频输出目的地 —— HDMI ARC、蓝牙、光纤、耳机、内置扬声器等。 用户可以通过它查询设备有哪些音频输出、当前正在使用哪个、切换到指定输出,以及为输出源自定义名称。 它是智能电视、AV 接收器、Soundbar 等媒体设备的常见 Cluster 之一,与 MediaInput 互为输入/输出的对应关系。
AudioOutput Cluster 定义了一个 NameUpdates(NU) Feature。
启用后,控制端可以通过 RenameOutput 命令为输出源自定义名称
(例如把"Bluetooth"改成"HomePod")。未启用时,输出源名称由设备固定,不可修改。
命令(Commands)
AudioOutput Cluster 共有 2 个命令。SelectOutput 用于切换音频输出目的地, RenameOutput 允许用户为输出源自定义名称(需要 NU 特性)。 点击下方表格中的命令 ID 可跳转到对应的详细说明。
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 修改 |
OutputInfoStruct 只有 3 个字段(Index、OutputType、Name),比 MediaInput 的 InputInfoStruct 少了一个 Description 字段。
音频输出源的信息相对简单,通常名称本身就足以区分不同输出。
OutputTypeEnum
定义音频输出源的接口类型。共 6 个枚举值,涵盖常见的音频输出方式。 控制端可据此在 UI 上展示对应的图标或分类。
Feature 位图
AudioOutput Cluster 通过 FeatureMap(0xFFFC)声明设备支持的可选能力:
支持用户自定义输出源名称的设备应启用此特性 —— 例如用户希望把"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 切换电视音频输出
- 读取
OutputList (0x0000),获取所有输出源(Index、Name、OutputType) - 读取
CurrentOutput (0x0001),高亮当前选中的输出源 - 在 UI 上展示输出源列表,根据 OutputType 显示对应图标(蓝牙、HDMI、耳机等)
- 用户点击目标输出源,发送
SelectOutput (0x00),Index 设为该输出源的索引值 - 订阅
CurrentOutput属性变化,确认切换成功后更新 UI
场景 2:用户自定义输出源名称
- 检查设备的
FeatureMap (0xFFFC),确认支持 NU(Bit 0 = 1) - 读取
OutputList (0x0000),展示输出源列表 - 用户长按某个输出源(如 Index=2,当前名称"Bluetooth"),弹出重命名输入框
- 用户输入新名称"HomePod",发送
RenameOutput (0x01),Index=2,Name="HomePod" - 订阅
OutputList变化,确认名称更新后刷新 UI
注意:如果 FeatureMap 不包含 NU 特性,UI 上不应显示重命名入口, 发送 RenameOutput 命令会被设备拒绝。