跳转到内容

插件系统

Monibuca V6 采用插件化架构,所有协议支持和扩展功能都以插件形式实现。引擎本身只提供核心的流管理、帧分发和配置框架,协议编解码和业务逻辑由插件完成。

官方预编译二进制和 Docker 镜像已内置全部官方插件。这是默认模式,提供最佳性能,通过 config.yamlenable 字段开关。

优点: 无运行时加载开销,部署简单

定制或第三方插件以共享库(.so/.dylib/.dll)形式放在 plugins_dir,在运行时加载。

优点: 无需更换主程序二进制即可添加/更新插件

适用场景: 需要热更新插件,或由第三方提供插件的部署场景

插件编译为 WebAssembly 模块,在 WASM 运行时中隔离执行。

优点: 最高安全性,插件不能访问主机内存

适用场景: 执行不受信任的第三方插件

预编译二进制默认包含全部官方插件,可通过配置文件按需启用或禁用。

Feature插件说明
rtmpplugin-rtmpRTMP/RTMPS 推拉流
rtspplugin-rtspRTSP/RTSPS 推拉流
flvplugin-flvHTTP-FLV 拉流
hlsplugin-hlsHLS 切片输出
webrtcplugin-webrtcWebRTC 推拉流
srtplugin-srtSRT 推拉流
webtransportplugin-webtransportWebTransport/QUIC
gb28181plugin-gb28181GB/T 28181 国标设备接入
Feature插件说明
mp4plugin-mp4MP4 录制
snapplugin-snap截图服务
ffmpeg_transcodeplugin-transcodeFFmpeg 转码
logrotateplugin-logrotate日志轮转
debugplugin-debug调试工具
seiplugin-seiSEI 数据注入/提取
crontabplugin-crontab定时任务
reportplugin-report数据上报
mixplugin-mix混流
cryptoplugin-crypto流加密
transcode内置 Opus↔AAC 转码(codec crate feature)
Feature插件说明
onvifplugin-onvifONVIF 设备发现与管理
v4l2plugin-v4l2V4L2 摄像头采集(Linux)
alsaplugin-alsaALSA 音频采集(Linux)
homekitplugin-homekitHomeKit 相机模拟
Feature插件说明
liveplugin-live直播间
meetingplugin-meeting会议室
内置 room房间服务(引擎内置,非插件)
Feature插件说明
clusterplugin-cluster集群部署
auth认证鉴权
licenseLicense 管理

预编译版本和 Docker 镜像已包含以上全部插件。通过配置文件中的 enable: true/false 按需启用:

config.yaml
rtmp:
enable: true
rtsp:
enable: true
webrtc:
enable: true
hls:
enable: false # 不需要的插件设为 false

Monibuca V6 共有 25 个独立插件 crate,加上 1 个内置房间服务:

plugins/
├── 协议类 (8)
│ ├── rtmp/ RTMP/RTMPS
│ ├── rtsp/ RTSP/RTSPS
│ ├── flv/ HTTP-FLV
│ ├── hls/ HLS
│ ├── webrtc/ WebRTC
│ ├── srt/ SRT
│ ├── webtransport/ WebTransport
│ └── gb28181/ GB/T 28181
├── 功能类 (10)
│ ├── mp4/ MP4 录制
│ ├── snap/ 截图
│ ├── transcode/ FFmpeg 转码
│ ├── logrotate/ 日志轮转
│ ├── debug/ 调试
│ ├── sei/ SEI
│ ├── crontab/ 定时任务
│ ├── report/ 上报
│ ├── crypto/ 加密
│ └── mix/ 混流
├── 设备类 (4)
│ ├── onvif/ ONVIF
│ ├── v4l2/ V4L2
│ ├── alsa/ ALSA
│ └── homekit/ HomeKit
├── 房间/互动类 (2)
│ ├── live/ 直播间
│ └── meeting/ 会议室
└── 测试/开发 (1)
└── test/ 测试插件
内置服务:
└── src/room/ 房间服务 (RoomService)

插件只依赖 monibuca-sdk 契约层,不直接依赖引擎内部实现:

你的自定义插件
└──▶ sdk (monibuca-sdk) ← 插件契约层(商业授权)
└──▶ codec
[package]
name = "plugin-xxx"
version = "0.1.0"
edition = "2024"
[dependencies]
# sdk 由商业授权提供,路径以授权包为准
sdk = { path = "../monibuca-sdk" }
  • 内置插件:已包含在官方预编译二进制中,通过 config.yamlenable 开关即可,无需接触引擎源码。
  • 自定义插件:在获得 monibuca-sdk 授权后,可编译为动态库或 WASM,由引擎从 plugins_dir 加载。详见 插件开发指南

插件配置使用 ConfigSchema derive 宏,需要指定 sdk_path

use sdk::ConfigSchema;
#[derive(ConfigSchema)]
#[config_schema(sdk_path = "sdk")]
pub struct MyPluginConfig {
/// 监听端口
#[schema(default = 1935)]
pub port: u16,
/// 超时时间(秒)
#[schema(default = 30)]
pub timeout: u32,
}

插件通过 EngineContext 获取引擎能力,而不是直接依赖引擎内部类型:

pub struct EngineContext {
// 必有能力
pub stream_manager: Arc<dyn StreamManagerApi>,
// 可选能力
pub database: Option<Arc<dyn DatabaseApi>>,
pub transform: Option<Arc<dyn TransformApi>>,
pub playback: Option<Arc<dyn PlaybackApi>>,
}

引擎在 PluginManager::init_all() 时构造 EngineContext 并注入到每个插件。

联系我们

微信公众号:不卡科技 微信公众号二维码
腾讯频道:流媒体技术 腾讯频道二维码
QQ 频道:p0qq0crz08 QQ 频道二维码
QQ 群:751639168 QQ 群二维码