菜单

插件架构

相关源文件

OBS Studio 的插件架构提供了一个模块化扩展系统,允许在不修改核心应用程序的情况下添加新功能。本文档解释了插件系统的工作原理,包括其架构、构建系统和模块管理。

有关特定插件实现(例如视频源、编码器、输出、服务或滤镜)的信息,请参阅第 3.23.6 节中的相关页面。

架构概述

OBS Studio 插件系统遵循模块化架构,可在运行时动态加载和集成插件。

来源:plugins/CMakeLists.txt

插件系统由几个关键组件组成

  • 插件API:定义插件向OBS核心注册功能的接口
  • 插件加载器:在运行时发现并加载插件模块
  • 模块系统:管理插件模块生命周期(初始化、注册、清理)

插件类型

OBS Studio 支持多种类型的插件,可扩展其功能的各个方面

来源:plugins/CMakeLists.txt

源插件

源插件为 OBS 提供输入源

  • 游戏捕获 (win-capture)
  • 窗口捕获 (win-capture, mac-capture, linux-capture)
  • 监视器/显示器捕获 (win-capture, mac-capture, linux-capture)
  • 媒体文件 (image-source, obs-ffmpeg)
  • 浏览器内容 (obs-browser)
  • 文本生成 (text-freetype2)
  • 视频设备捕获 (win-dshow, linux-v4l2, mac-avcapture)
  • 音频设备捕获 (win-wasapi, linux-pulseaudio, mac-capture)

来源:plugins/CMakeLists.txt:45-56, plugins/CMakeLists.txt:88-90

编码器插件

编码器插件用于压缩音频和视频,以便进行流式传输和录制

  • 软件视频编码器 (obs-x264)
  • 硬件视频编码器 (obs-nvenc, obs-qsv11)
  • 音频编码器 (obs-ffmpeg, obs-libfdk)

来源:plugins/CMakeLists.txt:63-70, plugins/CMakeLists.txt:82

输出插件

输出插件处理编码媒体的发送目的地

  • 流媒体协议 (obs-outputs)
  • 本地文件录制 (obs-ffmpeg)
  • 虚拟摄像头输出 (win-dshow, mac-virtualcam)

来源:plugins/CMakeLists.txt:65, plugins/CMakeLists.txt:61

服务插件

服务插件提供与流媒体平台的集成

  • 流媒体服务配置 (rtmp-services)
  • 平台特定API集成

来源:plugins/CMakeLists.txt:84

滤镜插件

滤镜插件通过效果处理音频和视频

  • 标准滤镜 (obs-filters)
  • NVIDIA特定滤镜 (nv-filters)

来源:plugins/CMakeLists.txt:57, plugins/CMakeLists.txt:62

转场插件

转场插件提供场景转场效果

  • 标准转场 (obs-transitions)

来源:plugins/CMakeLists.txt:72

插件构建系统

OBS Studio 使用 CMake 管理其插件构建系统。该构建系统允许根据平台限制和用户偏好灵活地包含插件。

来源:plugins/CMakeLists.txt

构建选项

ENABLE_PLUGINS CMake 选项控制是否构建插件

当此选项为 ON(默认)时,OBS 将构建 plugins/CMakeLists.txt 文件中定义的插件。

来源:plugins/CMakeLists.txt:3-10

插件定义

add_obs_plugin 宏用于将插件添加到构建中。它可以指定平台约束,以确保插件仅在受支持的平台上构建

来源:plugins/CMakeLists.txt:34-90

平台特定插件

许多插件是平台特定的,并且只在受支持的平台上构建

平台插件
Windowswin-capture, win-dshow, win-wasapi, nv-filters, obs-text
macOSmac-capture, mac-avcapture, mac-syphon, mac-videotoolbox, mac-virtualcam
Linux/BSDlinux-capture, linux-v4l2, linux-pulseaudio, linux-alsa, linux-jack, linux-pipewire

来源:plugins/CMakeLists.txt:39-56, plugins/CMakeLists.txt:71-89

子模块插件

某些插件在单独的存储库中维护,并作为 Git 子模块包含

.gitmodules 文件定义了这些子模块关系

[submodule "plugins/obs-browser"]
	path = plugins/obs-browser
	url = https://github.com/obsproject/obs-browser.git
[submodule "plugins/obs-websocket"]
	path = plugins/obs-websocket
	url = https://github.com/obsproject/obs-websocket.git

来源:plugins/CMakeLists.txt:12-31, plugins/CMakeLists.txt:59, plugins/CMakeLists.txt:80, .gitmodules:4-9

插件组织

OBS Studio 插件分为几类

内置插件

这些插件包含在 OBS Studio 主存储库中,并且当 ENABLE_PLUGINS 为 ON 时默认构建

  • 跨平台插件:image-source, obs-filters, obs-transitions, rtmp-services, text-freetype2, obs-ffmpeg
  • 平台特定插件:win-capture, mac-capture, linux-capture

来源:plugins/CMakeLists.txt:34-90

子模块插件

这些插件在单独的存储库中维护,并作为 Git 子模块包含

  • obs-browser:提供基于 Chromium 的浏览器源功能
  • obs-websocket:提供用于远程控制 OBS 的 WebSocket 接口

来源:plugins/CMakeLists.txt:12-31, plugins/CMakeLists.txt:59, plugins/CMakeLists.txt:80, .gitmodules:4-9

外部插件

这些插件是独立开发的,可以单独安装。它们遵循相同的插件 API,但不包含在 OBS Studio 的主发行版中。

插件集成

OBS Studio 启动时,它通过以下过程加载插件

  1. 插件加载器在指定目录中搜索插件二进制文件
  2. 它将每个插件模块动态加载到内存中
  3. 调用插件的初始化函数
  4. 插件通过插件 API 向 OBS 核心注册其功能
  5. OBS 核心将插件功能集成到应用程序中

这种模块化架构使得 OBS Studio 能够高度可扩展,同时保持核心应用程序的稳定性。