OBS Studio 中的属性系统提供了一种平台无关的方式来定义 OBS 组件(来源、滤镜、编码器等)的可配置设置。它弥合了核心功能与用户界面之间的鸿沟,允许组件指定设置,这些设置可由前端显示和修改,而无需绑定到任何特定的 UI 工具包。
本文档涵盖属性系统的内部架构和使用。有关设置对话框的 UI 实现信息,请参阅前端 API 文档。
属性系统由以下关键组件组成
来源: libobs/obs-properties.h22-126 libobs/obs-properties.c177-205
其核心,属性系统包括
obs_properties_t: 形成设置面板的属性集合obs_property_t: 单个属性元素(布尔值、文本字段、下拉列表等)这种架构将组件逻辑与 UI 考量分离,使 OBS 能够在不同平台间一致地呈现配置界面。
单个属性(obs_property_t)具有以下结构
来源: libobs/obs-properties.c180-194
系统支持各种属性类型,以适应不同的设置需求
| 属性类型 | 描述 | 创建函数 |
|---|---|---|
| 布尔值 | 简单复选框 | obs_properties_add_bool() |
| 整型 | 数字输入(滑块或微调器) | obs_properties_add_int() |
| 浮点数 | 浮点数输入 | obs_properties_add_float() |
| 文本 | 文本输入框 | obs_properties_add_text() |
| 路径 | 文件/目录选择器 | obs_properties_add_path() |
| 列表 | 下拉/组合框 | obs_properties_add_list() |
| 颜色 | 颜色选择器 | obs_properties_add_color() |
| 按钮 | 可点击动作按钮 | obs_properties_add_button() |
| 字体 | 字体选择器 | obs_properties_add_font() |
| 可编辑列表 | 带添加/删除/编辑功能的列表 | obs_properties_add_editable_list() |
| 帧率 | 帧率选择 | obs_properties_add_frame_rate() |
| 分组 | 其他属性的容器 | obs_properties_add_group() |
来源: libobs/obs-properties.h45-60 libobs/obs-properties.c397-434
创建属性的典型模式遵循以下流程
来源: libobs/obs-properties.c207-246 libobs/obs-properties.c436-452
创建属性的关键步骤
obs_properties_create()创建属性容器obs_properties_add_xxx()函数添加属性属性系统通过回调支持动态 UI
来源: libobs/obs-properties.c792-818
回调使属性能够
虽然属性定义了 UI,但实际值存储在 obs_data_t 对象中
来源: libobs/obs-properties.c376-396 libobs/obs-properties.h162-163
这种分离允许
属性系统通过特定函数与 OBS 组件集成
来源: docs/sphinx/reference-modules.rst41-55
典型的集成流程
obs_properties_t 对象的 get_properties() 函数obs_data_t 对象中update() 函数并传入新设置当属性更改时,OBS 处理更新流程
来源: libobs/obs-properties.c376-396 libobs/obs-properties.c792-818
列表属性(组合框)提供多种格式和类型
来源: libobs/obs-properties.h62-75 libobs/obs-properties.c599-619
分组允许将属性组织成逻辑部分
来源: libobs/obs-properties.h107-111 libobs/obs-properties.c732-757
属性系统提供了一种灵活、独立于工具包的方式来定义 OBS 组件的可配置设置。通过将设置的定义与其表示和存储分离,OBS 实现了统一的配置体验,同时允许组件保持对其设置的控制。
该系统是 OBS 扩展性的关键部分,使插件和核心组件能够与用户界面无缝集成,而无需实现自己的 UI 代码。