Files
monibuca/IFLOW.md
eanfs 2311931432 feature:mp4-upload-s3 (#325)
* iFLOW CLI Automated Issue Triage

* Update for ai

* Revert "Update for ai"

This reverts commit b85978298a.

* Update ai md

* feature:mp4-upload-s3
2025-09-08 08:53:15 +08:00

4.2 KiB
Raw Permalink Blame History

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 目录进行功能测试。