应用信息 Cluster(ApplicationBasic)
Cluster ID: 0x050D |
所在 Endpoint: 应用端点(每个内容应用占用一个独立的 Endpoint)
ApplicationBasic 提供内容应用(Content App)的基本信息 —— 包括应用名称、开发商、版本号、运行状态和唯一标识。 它是 Matter 媒体/电视设备生态中的核心 Cluster,每个安装在电视或机顶盒上的内容应用都通过一个独立的 Endpoint 暴露这个 Cluster。
Matter 的媒体架构采用「每个应用一个 Endpoint」的模型。 例如一台智能电视上装了 3 个流媒体应用(视频、音乐、直播),设备就会在 Endpoint 3、4、5 上分别暴露各自的 ApplicationBasic Cluster。 Controller 通过枚举 Endpoint 来发现设备上安装了哪些应用,再读取每个 Endpoint 的 ApplicationBasic 获取应用详情。
属性总览
ApplicationBasic 共有 8 个属性,按功能分为四组。点击属性 ID 可跳转到对应的详细说明。
| ID | 名称 | 类型 | 分组 | 说明 |
|---|---|---|---|---|
0x0000 |
VendorName | string | 厂商信息 | 应用开发商名称 |
0x0001 |
VendorID | vendor-id | 厂商信息 | 应用开发商 ID(CSA 分配) |
0x0002 |
ApplicationName | string | 厂商信息 | 应用名称 |
0x0003 |
ProductID | uint16 | 产品标识 | 应用产品 ID |
0x0004 |
Application | ApplicationStruct | 产品标识 | 应用唯一标识(目录 + ID) |
0x0005 |
Status | ApplicationStatusEnum | 运行状态 | 应用当前运行状态 |
0x0006 |
ApplicationVersion | string | 运行状态 | 应用版本号 |
0x0007 |
AllowedVendorList | list<vendor-id> | 访问控制 | 允许访问此应用的厂商 ID 列表 |
厂商信息(0x0000 – 0x0002)
描述应用的开发商和名称。这些属性在应用安装后就已确定,运行时不可更改。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0000 |
VendorName(开发商名称) | string | 应用开发商的人类可读名称,最长 32 字符。如 "Netflix"、"YouTube"。可选属性 |
0x0001 |
VendorID(开发商 ID) | vendor-id | 应用开发商的 CSA 厂商编号。如果应用开发商未向 CSA 注册,此值为 0。可选属性 |
0x0002 |
ApplicationName(应用名称) | string | 应用的人类可读名称,最长 32 字符。如 "Netflix"、"Spotify"。必选属性,也是 ApplicationBasic 中唯一的必选属性 |
产品标识(0x0003 – 0x0004)
应用的产品编号和全局唯一标识。Application 属性是最重要的标识 —— 它通过目录体系唯一定位一个应用。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0003 |
ProductID(产品 ID) | uint16 | 应用开发商自行分配的产品编号。与 VendorID 组合可标识一款特定应用产品。可选属性 |
0x0004 |
Application(应用标识) | ApplicationStruct | 应用的全局唯一标识,由目录厂商 ID 和应用 ID 两个字段组成(见下方 ApplicationStruct)。可选属性 |
VendorID + ProductID 标识的是「谁开发的哪款产品」,是厂商维度的标识。
Application(ApplicationStruct)标识的是「在哪个应用目录中的哪个应用」,是平台维度的标识。
例如同一个视频应用,在 CSA 目录中的 ID 是 "com.example.video",在另一个平台目录中可能有不同的 ID。
Controller 通常用 Application 来定位和启动特定的内容应用。
运行状态(0x0005 – 0x0006)
描述应用的当前运行状态和版本信息。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0005 |
Status(运行状态) | ApplicationStatusEnum | 应用当前的运行状态(见下方 ApplicationStatusEnum)。可选属性 |
0x0006 |
ApplicationVersion(应用版本) | string | 应用的版本字符串,最长 32 字符。如 "2.1.0"、"3.0.0-beta"。必选属性 |
访问控制(0x0007)
控制哪些厂商的 Controller 可以访问此应用的 Cluster。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0007 |
AllowedVendorList(允许的厂商列表) | list<vendor-id> | 允许访问此内容应用的厂商 ID 列表。 只有列表中的厂商所生产的 Controller 才能与此应用的 Cluster 交互。 必选属性 |
AllowedVendorList 是在标准 ACL(Access Control List)之上的额外访问控制层。
即使 Controller 通过了 ACL 检查,如果它的 VendorID 不在 AllowedVendorList 中,
仍然无法访问这个应用 Endpoint 上的 Cluster(ApplicationBasic 本身除外)。
这个机制允许内容提供商限制只有合作方的设备才能控制自己的应用。
结构体与枚举
ApplicationStruct(应用标识结构体)
通过目录体系唯一标识一个内容应用。不同的应用目录(如 CSA、Google Play、Apple App Store)
各自有独立的编号体系,CatalogVendorID 指明使用哪个目录,ApplicationID 是该目录内的应用标识。
| 字段 | 类型 | 说明 |
|---|---|---|
| CatalogVendorID | uint16 | 应用目录的厂商 ID。标识应用来源于哪个应用目录/平台。例如 CSA 自己的目录、或某个 OTT 平台的目录 |
| ApplicationID | string | 在目录内唯一标识应用的字符串。格式由目录定义,通常是反向域名风格,如 "com.netflix.app" |
CatalogVendorID 不是应用开发商的 VendorID,而是应用目录提供商的 VendorID。
可以理解为:这个应用是在哪个「应用商店」上架的。
如果 CatalogVendorID 对应 CSA 官方目录(值为 0x60AE = 24750),
那么 ApplicationID 就是 CSA 目录体系下的应用标识。
ApplicationStatusEnum(应用运行状态枚举)
描述内容应用当前的运行和可见状态。
典型的状态变化路径:用户打开应用时 Stopped → ActiveVisibleFocus;
切换到另一个应用时 ActiveVisibleFocus → ActiveHidden(完全隐藏)或
ActiveVisibleFocus → ActiveVisibleNotFocus(画中画);
用户关闭应用时回到 Stopped。
Controller 可以订阅 Status 属性变化来追踪应用的生命周期。
命令(Commands)
ApplicationBasic 没有定义任何命令。应用的启动和控制由其他 Cluster 负责:
- ApplicationLauncher(0x050C)—— 负责启动、停止和隐藏应用
- MediaPlayback(0x0506)—— 负责播放控制(播放、暂停、快进等)
- ContentLauncher(0x050A)—— 负责启动特定内容(如打开某个视频)
ApplicationBasic 的定位是只读的信息查询 —— 它告诉 Controller「这个应用是什么」, 而不负责「对这个应用做什么」。
示例数据
一台智能电视上某个流媒体应用(Endpoint 3)的 ApplicationBasic Cluster 读取结果:
{
// --- 厂商信息 ---
"0x0000": "StreamCo", // VendorName = 应用开发商名称
"0x0001": 4996, // VendorID = 0x1384(CSA 分配)
"0x0002": "StreamCo Player", // ApplicationName = 应用名称
// --- 产品标识 ---
"0x0003": 101, // ProductID = 应用产品 ID
"0x0004": { // Application(应用标识结构体)
"CatalogVendorID": 24742, // CatalogVendorID = CSA 目录
"ApplicationID": "com.streamco.player" // ApplicationID = 应用 ID
},
// --- 运行状态 ---
"0x0005": 1, // Status = ActiveVisibleFocus(前台可见且有焦点)
"0x0006": "2.1.0", // ApplicationVersion = 应用版本号
// --- 访问控制 ---
"0x0007": [4996, 65521] // AllowedVendorList = 允许访问此应用的厂商 ID 列表
}
Controller 发现设备上安装了哪些应用的常规流程:
- 读取 Endpoint 0 的
Descriptor Cluster (0x001D)的PartsList获取所有 Endpoint 编号 - 对每个 Endpoint,读取其 Descriptor 的
ServerList,检查是否包含0x050D(ApplicationBasic) - 找到后,读取该 Endpoint 的
ApplicationName (0x0002)和Application (0x0004)获取应用名和标识 - 读取
Status (0x0005)判断应用当前是否在运行
常见场景
场景 1:发现并展示电视上的所有内容应用
手机 App 连接到一台智能电视后,需要在界面上列出电视上安装的所有内容应用(类似电视遥控器的应用列表)。
- 读取 Endpoint 0 的 Descriptor Cluster,获取
PartsList(所有子 Endpoint) - 逐个检查每个 Endpoint 的
ServerList,过滤出包含0x050D的 Endpoint - 对每个应用 Endpoint,批量读取
ApplicationName、VendorName、ApplicationVersion、Status - 在 App 界面上渲染应用列表,显示名称、版本和运行状态(如「运行中」或「已停止」)
注意:不是所有 Endpoint 都是内容应用,有些可能是灯、传感器等其他设备类型。
通过检查 Descriptor 的 DeviceTypeList 是否包含 Content App(0x0024)可以更精确地过滤。
场景 2:通过应用标识定位并启动特定应用
用户说「打开 Netflix」,Controller 需要找到 Netflix 对应的 Endpoint 并启动它。
- 遍历所有应用 Endpoint,读取每个 Endpoint 的
Application (0x0004)属性 - 比对
ApplicationStruct中的CatalogVendorID和ApplicationID,找到目标应用 - 检查
Status (0x0005):如果已经是ActiveVisibleFocus (1),无需操作 - 如果是
Stopped (0)或其他状态,通过 ApplicationLauncher Cluster (0x050C) 发送 LaunchApp 命令启动应用 - 订阅
Status属性变化,确认应用成功进入ActiveVisibleFocus状态
注意:启动应用不是 ApplicationBasic 的职责 —— 它只提供信息查询。 实际启动操作由同一 Endpoint 上的 ApplicationLauncher Cluster 完成。