菜单

插件系统

相关源文件

本文档全面概述了 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 中的插件遵循从加载到卸载的特定生命周期

插件生命周期包括:

  1. 加载:加载插件共享库
  2. 注册:插件向 OBS 注册其功能
  3. 创建:当需要时,OBS 创建插件实例
  4. 激活/停用:插件在使用时激活,不需要时停用
  5. 销毁:当不再需要时,插件实例被销毁
  6. 卸载: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 从多个位置加载插件

  1. 内置插件:OBS 主仓库的一部分并在编译时构建的插件
  2. 第三方插件:安装在 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

创建自定义插件

开发者可以通过为所需的插件类型实现相应的接口来创建自定义插件。一般步骤是:

  1. 创建共享库项目
  2. 实现插件类型所需的回调函数
  3. 向 OBS 注册插件
  4. 构建并分发插件

内置插件示例

OBS Studio 附带许多内置插件。以下是一些示例:

媒体源 (FFmpeg 源)

FFmpeg 源插件提供媒体播放功能,允许用户将视频文件、图像和音频文件添加到其场景中。

来源:plugins/obs-ffmpeg/obs-ffmpeg-source.c

x264 编码器

x264 插件提供基于软件的 H.264 编码。

来源:plugins/obs-x264/obs-x264.c

RTMP 输出

RTMP 输出插件支持流媒体到 Twitch、YouTube 和 Facebook 等 RTMP 服务器。

来源:plugins/obs-outputs/rtmp-stream.c

NVENC 编码器

NVENC 插件使用 NVIDIA GPU 提供硬件加速编码。

来源:plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c

子模块插件

OBS 还包含一些作为 Git 子模块的插件,这些插件在单独的仓库中维护

OBS 浏览器

浏览器源插件 (obs-browser) 允许在 OBS 场景中嵌入网页内容。

OBS WebSocket

WebSocket 插件 (obs-websocket) 提供一个 WebSocket 服务器,允许外部应用程序控制 OBS。

来源:.gitmodules

结论

OBS Studio 插件系统提供了一种灵活而强大的方式来扩展 OBS 的功能。通过实现适当的接口和回调,开发者可以创建与 OBS 无缝集成的自定义插件。

了解插件架构、注册机制和生命周期对于有效使用现有插件和开发新的 OBS 插件至关重要。