应用信息 Cluster(ApplicationBasic)

Cluster ID: 0x050D  |  所在 Endpoint: 应用端点(每个内容应用占用一个独立的 Endpoint)

ApplicationBasic 提供内容应用(Content App)的基本信息 —— 包括应用名称、开发商、版本号、运行状态和唯一标识。 它是 Matter 媒体/电视设备生态中的核心 Cluster,每个安装在电视或机顶盒上的内容应用都通过一个独立的 Endpoint 暴露这个 Cluster。

每个应用 = 一个 Endpoint

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)。可选属性
Application 与 VendorID + ProductID 的区别

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 的关系

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 的含义

CatalogVendorID 不是应用开发商的 VendorID,而是应用目录提供商的 VendorID。 可以理解为:这个应用是在哪个「应用商店」上架的。 如果 CatalogVendorID 对应 CSA 官方目录(值为 0x60AE = 24750), 那么 ApplicationID 就是 CSA 目录体系下的应用标识。

ApplicationStatusEnum(应用运行状态枚举)

描述内容应用当前的运行和可见状态。

0
Stopped 已停止 —— 应用未运行,需要先启动才能使用
1
ActiveVisibleFocus 前台运行 —— 应用正在运行、可见,且拥有用户输入焦点(当前正在使用的应用)
2
ActiveHidden 后台运行 —— 应用正在运行但不可见(如后台播放音乐)
3
ActiveVisibleNotFocus 可见但无焦点 —— 应用正在运行且可见,但用户焦点在其他应用上(如画中画模式)
状态转换场景

典型的状态变化路径:用户打开应用时 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 发现设备上安装了哪些应用的常规流程:

  1. 读取 Endpoint 0 的 Descriptor Cluster (0x001D) 的 PartsList 获取所有 Endpoint 编号
  2. 对每个 Endpoint,读取其 Descriptor 的 ServerList,检查是否包含 0x050D(ApplicationBasic)
  3. 找到后,读取该 Endpoint 的 ApplicationName (0x0002) 和 Application (0x0004) 获取应用名和标识
  4. 读取 Status (0x0005) 判断应用当前是否在运行

常见场景

场景 1:发现并展示电视上的所有内容应用

手机 App 连接到一台智能电视后,需要在界面上列出电视上安装的所有内容应用(类似电视遥控器的应用列表)。

  1. 读取 Endpoint 0 的 Descriptor Cluster,获取 PartsList(所有子 Endpoint)
  2. 逐个检查每个 Endpoint 的 ServerList,过滤出包含 0x050D 的 Endpoint
  3. 对每个应用 Endpoint,批量读取 ApplicationName、VendorName、ApplicationVersion、Status
  4. 在 App 界面上渲染应用列表,显示名称、版本和运行状态(如「运行中」或「已停止」)

注意:不是所有 Endpoint 都是内容应用,有些可能是灯、传感器等其他设备类型。 通过检查 Descriptor 的 DeviceTypeList 是否包含 Content App(0x0024)可以更精确地过滤。

场景 2:通过应用标识定位并启动特定应用

用户说「打开 Netflix」,Controller 需要找到 Netflix 对应的 Endpoint 并启动它。

  1. 遍历所有应用 Endpoint,读取每个 Endpoint 的 Application (0x0004) 属性
  2. 比对 ApplicationStruct 中的 CatalogVendorID 和 ApplicationID,找到目标应用
  3. 检查 Status (0x0005):如果已经是 ActiveVisibleFocus (1),无需操作
  4. 如果是 Stopped (0) 或其他状态,通过 ApplicationLauncher Cluster (0x050C) 发送 LaunchApp 命令启动应用
  5. 订阅 Status 属性变化,确认应用成功进入 ActiveVisibleFocus 状态

注意:启动应用不是 ApplicationBasic 的职责 —— 它只提供信息查询。 实际启动操作由同一 Endpoint 上的 ApplicationLauncher Cluster 完成。