Monibuca
是一个由国人主导开发的高性能、模块化、插件化的音视频服务器框架 ,使用 Go 语言编写,广泛用于流媒体直播、录播、转码、HLS/FLV 推流分发、WebRTC 网关等应用场景。
🧭 一、前因:为什么要做 Monibuca?
背景:
传统的流媒体服务器(如 SRS、nginx-rtmp、Wowza)存在一些问题:
问题 | 描述 |
---|---|
📦 固定功能 | 要支持新的协议或处理逻辑很难改动 |
🧩 插件扩展性差 | 不支持按需加载模块,定制开发复杂 |
🐢 性能瓶颈 | 多数用 C/C++ 写,编译难调,性能未必优 |
🌐 云原生不友好 | 不适配容器化和微服务部署场景 |
动机:
作者 langhuihui
(浪辉辉)从早期使用 SRS、nginx-rtmp、自己写过 RTMP server 等经验中意识到:
需要一个 以插件为核心架构的流媒体内核,支持热插拔、热配置、高并发,并为未来云原生环境打好基础。
于是:Monibuca 出生了。
🏗 二、项目核心理念
✨ 核心特性
特性 | 描述 |
---|---|
📦 插件架构 | 所有功能都通过插件注册,比如 HLS、RTMP、录制、WebRTC |
🧩 动态加载 | 插件可按需启用,模块化清晰 |
🚀 高并发 | 基于 Go 高性能协程模型,事件驱动架构 |
🔁 支持协议多 | 支持 RTMP、HTTP-FLV、HLS、WebRTC、MP4、TS、SRT 等 |
🎞 录制回放 | 插件实现 MP4/HLS/FLV 录制、拖动回放、暂停、倍速 |
💻 控制台 UI | 内置网页端面板,便于查看节点、流、连接状态 |
🌈 配置热更新 | 支持 JSON 配置 + REST 接口更新,方便动态控制 |
☁ 云原生友好 | 支持 Docker 部署、多节点集群转发 |
🧱 三、项目结构与插件生态
Monibuca 核心是一个 "引擎",插件通过注册方式加入系统:
monibuca/
├── engine.go ← 核心流程调度
├── config.json ← 插件与路由配置
├── plugins/
│ ├── hls/
│ ├── rtmp/
│ ├── webrtc/
│ ├── recorder/
│ └── dashboard/
常用插件说明:
插件 | 作用 |
---|---|
rtmp |
接收 RTMP 推流 |
httpflv |
分发 HTTP-FLV |
hls |
自动转切 HLS 并输出 .m3u8 |
recorder |
支持录制成 MP4、FLV、TS,支持点播 |
webrtc |
WebRTC 推/拉流 |
dashboard |
控制台 UI |
📈 四、发展轨迹与现状
- 2019年:开始初版架构设计
- 2020年:完成基础插件系统,支持 RTMP/HLS
- 2021年:新增 WebRTC、Dashboard、倍速播放、录制快进
- 2022年+:加入云原生特性、REST 控制接口、商业方案落地
- 2023年~2024年:成为不少中小企业、教育平台、监控平台的视频中台核心
GitHub 项目地址:
🔗 https://github.com/langhuihui/monibuca
💼 五、适用场景
场景 | 描述 |
---|---|
🎥 视频直播平台 | 高并发直播/转发/分发 |
🎓 在线教育 | 教学直播 + 回放录制 |
🚗 安防监控 | 摄像头 RTSP 推流 + 录制回看 |
📹 转码中转站 | RTMP/WebRTC 接入,输出 HLS |
☁ 云原生部署 | Docker/K8s 场景快速部署多个节点 |
🔧 六、和其他项目的对比
项目 | 语言 | 插件化 | 控制台 | WebRTC | 点播功能 | 云原生 |
---|---|---|---|---|---|---|
Monibuca | Go | ✅ 强 | ✅ 内置 | ✅ 支持 | ✅ 支持 | ✅ 友好 |
SRS | C++ | ❌ 固定 | ✅ 有 | ✅ 支持 | ❌ 限制 | ⚠️ 编译复杂 |
Nginx-rtmp | C | ❌ 固定 | ❌ 无 | ❌ 不支持 | ❌ 不支持 | ⚠️ 传统 |
📚 七、学习建议
- 克隆项目:
git clone https://github.com/langhuihui/monibuca
- 运行示例配置:查看
config.json
和plugins
目录 - 阅读插件源码:推荐从
plugins/hls
和plugins/recorder
开始 - 实战练习:RTMP 推流 + HLS 播放 + 点播回放
- 改写或开发插件:你可以写一个
watermark
插件,实现在视频流中打水印