mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-09-26 21:01:19 +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
124 lines
4.2 KiB
Markdown
124 lines
4.2 KiB
Markdown
# 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 或更高版本
|
||
* 对流媒体协议有基本了解
|
||
|
||
### 运行默认配置
|
||
|
||
```bash
|
||
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` 目录进行功能测试。 |