本文档全面概述了 OBS Studio 插件系统,该系统允许 OBS 通过模块化组件扩展额外功能。插件系统是 OBS Studio 的核心架构功能,使开发者能够添加新的来源、编码器、输出、服务、滤镜和转场。
OBS Studio 插件系统使应用程序能够扩展各种额外功能,而无需修改核心代码库。插件通常被编译为共享库(Windows 上的 DLL,Linux 上的 .so 文件等),可以是内置的(OBS 主仓库的一部分)或第三方开发的。
来源:plugins/CMakeLists.txt .gitmodules
OBS Studio 支持多种类型的插件,每种插件在广播流程中都有特定的用途
| 插件类型 | 目的 | 示例 |
|---|---|---|
| 来源 | 提供视频/音频输入 | 媒体源,浏览器源,游戏捕获 |
| 编码器 | 处理视频/音频编码 | x264, NVENC, FFmpeg AAC |
| 输出 | 管理流媒体/录制输出 | RTMP 输出, FFmpeg 输出 |
| 服务 | 提供流媒体服务集成 | RTMP 服务 |
| 过滤器 | 处理视频/音频效果 | 色彩校正, 噪声抑制 |
| 转场 | 管理场景转场 | 剪切,淡入淡出,划像 |
来源:plugins/obs-ffmpeg/obs-ffmpeg-source.c plugins/obs-x264/obs-x264.c plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c plugins/obs-outputs/rtmp-stream.c
插件系统使用注册机制,插件通过结构化接口向 OBS 暴露其功能。每种插件类型都实现了一组特定的回调函数,OBS 核心会根据需要调用这些函数。
此图显示了插件如何通过提供一个包含 OBS 根据需要调用的回调函数的结构来向 OBS 注册。
来源:plugins/obs-ffmpeg/obs-ffmpeg-source.c784-807 plugins/obs-x264/obs-x264.c577-597 plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c577-592
OBS 中的插件遵循从加载到卸载的特定生命周期
插件生命周期包括:
来源:plugins/obs-ffmpeg/obs-ffmpeg-source.c595-633 plugins/obs-ffmpeg/obs-ffmpeg-source.c635-652 plugins/obs-x264/obs-x264.c88-98 plugins/obs-outputs/rtmp-stream.c101-149
让我们看看不同类型的插件如何向 OBS 注册
源插件使用 obs_source_info 结构进行注册
来源:plugins/obs-ffmpeg/obs-ffmpeg-source.c784-807
编码器插件使用 obs_encoder_info 结构进行注册
来源:plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c577-592
输出插件具有类似的注册结构,带有用于启动、停止和处理数据的回调函数。
OBS 从多个位置加载插件
plugins/CMakeLists.txt 文件显示了内置插件是如何添加到构建中的
某些插件会根据平台有条件地包含
.gitmodules 文件显示,一些插件作为 Git 子模块维护,并作为独立仓库包含
[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 .gitmodules
插件系统允许数据以类似管道的方式流经各种插件类型。以下是视频/音频数据流的简化视图
此图显示了数据如何从源头流经滤镜、编码器和输出,最终到达目标。
来源:plugins/obs-ffmpeg/obs-ffmpeg-source.c plugins/obs-x264/obs-x264.c plugins/obs-outputs/rtmp-stream.c
开发者可以通过为所需的插件类型实现相应的接口来创建自定义插件。一般步骤是:
OBS Studio 附带许多内置插件。以下是一些示例:
FFmpeg 源插件提供媒体播放功能,允许用户将视频文件、图像和音频文件添加到其场景中。
来源:plugins/obs-ffmpeg/obs-ffmpeg-source.c
x264 插件提供基于软件的 H.264 编码。
来源:plugins/obs-x264/obs-x264.c
RTMP 输出插件支持流媒体到 Twitch、YouTube 和 Facebook 等 RTMP 服务器。
来源:plugins/obs-outputs/rtmp-stream.c
NVENC 插件使用 NVIDIA GPU 提供硬件加速编码。
来源:plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c
OBS 还包含一些作为 Git 子模块的插件,这些插件在单独的仓库中维护
浏览器源插件 (obs-browser) 允许在 OBS 场景中嵌入网页内容。
WebSocket 插件 (obs-websocket) 提供一个 WebSocket 服务器,允许外部应用程序控制 OBS。
来源:.gitmodules
OBS Studio 插件系统提供了一种灵活而强大的方式来扩展 OBS 的功能。通过实现适当的接口和回调,开发者可以创建与 OBS 无缝集成的自定义插件。
了解插件架构、注册机制和生命周期对于有效使用现有插件和开发新的 OBS 插件至关重要。