mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-09-27 01:15:52 +08:00

* iFLOW CLI Automated Issue Triage
* Update for ai
* Revert "Update for ai"
This reverts commit b85978298a
.
* Update ai md
* feature:mp4-upload-s3
4.2 KiB
4.2 KiB
Monibuca v5 项目概述
Monibuca 是一个使用纯 Go 语言开发的、高度可扩展的高性能流媒体服务器开发框架。它旨在提供高并发、低延迟的流媒体处理能力,并支持多种流媒体协议和功能。
核心特性
- 高性能: 采用无锁设计、部分手动内存管理和多核计算。
- 低延迟: 实现零等待转发,全链路亚秒级延迟。
- 模块化: 按需加载,无限扩展性。
- 灵活性: 高度可配置,适应各种流媒体场景。
- 可扩展性: 支持分布式部署,轻松应对大规模场景。
- 调试友好: 内置调试插件,实时性能监控与分析。
- 媒体处理: 支持截图、转码、SEI 数据处理。
- 集群能力: 内置级联和房间管理。
- 预览功能: 支持视频预览、多屏预览、自定义屏幕布局。
- 安全性: 提供加密传输和流认证。
- 性能监控: 支持压力测试和性能指标收集(集成在测试插件中)。
- 日志管理: 日志轮转、自动清理、自定义扩展。
- 录制与回放: 支持 MP4、HLS、FLV 格式,支持倍速、寻址、暂停。
- 动态时移: 动态缓存设计,支持直播时移回放。
- 远程调用: 支持 gRPC 接口,实现跨语言集成。
- 流别名: 支持动态流别名,灵活的多流管理。
- AI 能力: 集成推理引擎,支持 ONNX 模型,支持自定义前后处理。
- WebHook: 订阅流生命周期事件,用于业务系统集成。
- 私有协议: 支持自定义私有协议以满足特殊业务需求。
支持的协议
- RTMP
- RTSP
- HTTP-FLV
- WS-FLV
- HLS
- WebRTC
- GB28181
- ONVIF
- SRT
技术架构
Monibuca 基于插件化架构设计,核心功能通过插件扩展。主要组件包括:
- Server: 核心服务器,负责管理流、插件、任务等。
- Plugin: 插件系统,提供各种功能扩展。
- Publisher: 流发布者,负责接收和管理流数据。
- Subscriber: 流订阅者,负责消费流数据。
- Task: 任务系统,用于管理异步任务和生命周期。
- Config: 配置系统,支持多层级配置(环境变量、配置文件、默认值等)。
构建与运行
前提条件
- Go 1.23 或更高版本
- 对流媒体协议有基本了解
运行默认配置
cd example/default
go run -tags sqlite main.go
构建标签
可以使用以下构建标签来自定义构建:
构建标签 | 描述 |
---|---|
disable_rm |
禁用内存池 |
sqlite |
启用 sqlite DB |
sqliteCGO |
启用 sqlite cgo 版本 DB |
mysql |
启用 mysql DB |
postgres |
启用 postgres DB |
duckdb |
启用 duckdb DB |
taskpanic |
抛出 panic,用于测试 |
fasthttp |
启用 fasthttp 服务器而不是 net/http |
Web UI
将 admin.zip
文件(不要解压)放在与配置文件相同的目录中。然后访问 http://localhost:8080 即可访问 UI。
开发约定
项目结构
example/
: 包含各种使用示例。pkg/
: 核心库代码。plugin/
: 各种功能插件。pb/
: Protocol Buffer 生成的代码。doc/
: 项目文档。scripts/
: 脚本文件。
配置
- 使用 YAML 格式进行配置。
- 支持多层级配置覆盖(环境变量 > 配置文件 > 默认值)。
- 插件配置通常以插件名小写作为前缀。
日志
- 使用
slog
进行日志记录。 - 支持不同日志级别(debug, info, warn, error, trace)。
- 插件可以有自己的日志记录器。
插件开发
- 插件需要实现
IPlugin
接口。 - 通过
InstallPlugin
函数注册插件。 - 插件可以注册 HTTP 处理函数、gRPC 服务等。
- 插件可以有自己的配置结构体。
任务系统
- 使用
task
包管理异步任务。 - 任务具有生命周期管理(启动、停止、销毁)。
- 任务可以有父子关系,形成任务树。
- 支持任务重试机制。
测试
- 使用 Go 标准测试包
testing
。 - 在
test/
目录下编写集成测试。 - 使用
example/test
目录进行功能测试。