5分钟上手Monibuca:从零搭建高性能流媒体服务器完整指南
【免费下载链接】monibucaMonibuca(简称 m7s)是一款纯 Go 开发的开源流媒体服务器开发框架。项目地址: https://gitcode.com/langhuihui/monibuca
Monibuca(简称 m7s)是一款纯 Go 语言开发的开源流媒体服务器开发框架,支持 RTMP、RTSP、HTTP-FLV、HLS、WebRTC、GB28181、SRT 等主流协议。它采用无锁设计、内存池优化和多核计算,能实现全链路亚秒级低延迟转发,并内置录制、截图、转码、级联、监控等插件。本文将带你从零开始,快速搭建一个可用的流媒体服务器,适合新手和普通开发者阅读。
一、为什么选择 Monibuca 流媒体服务器?
在接触代码之前,先了解它能做什么:
| 能力 | 说明 |
|---|---|
| 🚀 高性能 | 无锁设计、内存池管理、多核计算 |
| ⚡ 低延迟 | 0 等待转发,全链路亚秒级延迟 |
| 📦 插件化 | 协议、功能、工具按需加载扩展 |
| 🌐 多协议 | RTMP / RTSP / FLV / HLS / WebRTC / GB28181 / SRT |
| 🎬 媒体处理 | 录制回放、截图、转码、SEI 数据处理 |
| 🔗 集群级联 | 内置级联与房间管理,支持分布式部署 |
| 📊 运维友好 | Prometheus 监控、日志轮转、内置调试插件 |
二、环境准备:Monibuca 环境要求与安装步骤
搭建前只需准备一个 Go 环境:
- Go 1.23 或更高版本(本项目 go.mod 声明使用 Go 1.24)
- 基础的流媒体协议概念即可,无需其他依赖
克隆仓库(仓库地址):
git clone https://gitcode.com/langhuihui/monibuca cd monibuca三、最快启动方法:一条命令跑起流媒体服务器
Monibuca 提供了开箱即用的示例工程,位于 example/default/ 目录,包含默认配置文件 config.yaml 和入口文件 main.go。
进入目录并运行:
cd example/default go run -tags sqlite main.go💡
-tags sqlite表示启用 SQLite 存储(纯 Go 实现,无需安装数据库)。启动后即可推流、拉流。
整个工程的核心入口非常简洁,m7s.Run会根据配置文件加载所有插件并启动服务,可以打开 main.go 查看完整写法。
3.1 启动成功后看到什么?
默认监听以下常用端口:
| 协议 | 地址 |
|---|---|
| HTTP 服务(Admin、FLV 等) | http://localhost:8080 |
| RTMP 推/拉流 | rtmp://localhost:1935 |
| RTSP | rtsp://localhost:554 |
| SRT | :6000 |
| WebRTC(WHIP/WHEP) | udp:9000-9100 |
用 FFmpeg 推一路测试流试试:
ffmpeg -re -stream_loop -1 -i test.flv -c copy -f flv rtmp://localhost:1935/live/test再用任意协议播放验证:
ffplay http://localhost:8080/flv/live/test ffplay rtmp://localhost/live/test能看到画面,说明你的 Monibuca 流媒体服务器已经跑起来了!🎉
四、Monibuca 架构图解:插件化流媒体服务器如何工作?
从架构图可以看出 Monibuca 的分层设计:
- core(核心层):环形缓冲区、任务系统、内存池、发布-订阅、插件系统、别名系统,是性能与低延迟的根基;
- protocol plugins(协议插件):rtmp、rtsp、webrtc、gb28181、hls、flv 等,按需引入;
- functional plugins(功能插件):转码、级联、ONVIF、AI、SEI 等;
- util plugins(工具插件):日志轮转、调试、监控、压测、WebHook;
- database:可选 SQLite、MySQL、PostgreSQL、DuckDB。
详细的架构设计文档见 doc_CN/arch/index.md,其中包含 转发机制、配置机制、任务系统 等专题。
五、常用场景配置:拉流、录制、转推怎么做?
除默认配置外,example/ 目录提供了大量可直接参考的场景示例,说明文档见 example/READEME_CN.md:
- 拉取本地文件:将 pull_flv_file.yaml 中路径改为本地 flv 文件,再执行
go run -tags sqlite main.go -c ../8080/pull_flv_file.yaml,即可把文件当直播流分发; - 拉取远端流:修改 pull_rtmp.yaml 中的拉流地址,实现 rtmp/rtsp 拉流代理;
- 自动录制:启用 record.yaml 配置,支持 MP4、HLS、FLV 格式录制回放;
- 转推:两个进程分别使用 pull_flv_file.yaml 与 pull_rtmp_push.yaml 即可实现 A → B 流转发;
- GB28181 国标对接:gb28181_server.yaml 与 gb28181_client.yaml 用于设备接入和级联平台。
所有示例通过-c 配置文件参数切换,无需修改代码,非常适合学习各协议的接入方式。
六、进阶配置:构建标签与性能监控
6.1 通过构建标签定制功能
Monibuca 支持用 Go build tag 控制可选组件:
| 构建标签 | 作用 |
|---|---|
sqlite/mysql/postgres/duckdb | 选择数据库后端 |
fasthttp | 使用 fasthttp 替代标准 HTTP 服务器 |
disable_rm | 禁用内存池 |
enable_buddy | 开启 buddy 内存预申请 |
例如启用 MySQL 存储:
go run -tags mysql main.go6.2 接入 Prometheus 监控
服务器内置/api/metrics指标接口,在 Prometheus 中加一段配置即可采集:
scrape_configs: - job_name: "monibuca" metrics_path: "/api/metrics" static_configs: - targets: ["localhost:8080"]配合 Grafana 即可实时观察 QPS、在线流数等指标;内置的 debug 插件还支持实时性能监控与分析(源码见 plugin/debug/)。
七、下一步学习路线
到这里,你已经完成了流媒体服务器从零到可用的全部步骤。建议按以下顺序深入:
- 读配置:通读 example/default/config.yaml,理解 onpub/onsub/pull 等触发式配置;
- 看架构:阅读 架构设计文档 与 目录结构说明;
- 学插件:按 插件开发指南 开发自己的协议插件或功能插件;
- 做扩展:利用 gRPC 接口实现跨语言集成,或用 WebHook 对接业务系统。
纯 Go 技术栈、零外部依赖、单二进制部署——Monibuca 是目前上手成本最低的自建流媒体服务器方案之一。5 分钟跑通推流拉流后,你完全可以在下午就把它接入自己的直播或物联网项目。
【免费下载链接】monibucaMonibuca(简称 m7s)是一款纯 Go 开发的开源流媒体服务器开发框架。项目地址: https://gitcode.com/langhuihui/monibuca
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考