介绍
您正在阅读的是 m7s v4 的文档
- m7s v3 文档需要自行访问https://github.com/langhuihui/m7s-docs 的 v3 分支
- v4 升级的功能
什么是 Monibuca(m7s)?
Monibuca(发音:莫妮不卡,m7s 是其缩写,类似 k8s) 是一个开源的 Go 语言开发的流媒体服务器开发框架。 它基于 go1.19+,此外并无任何其他依赖构建,并提供了一套插件式的二次开发模型,帮助你高效地开发流媒体服务器,你既可以直接使用官方提供的插件,也可以自己开发插件扩展任意的功能,所以 Monibuca 是可以支持任意流媒体协议的框架!
如果您需要二次开发
- 请访问开发文档
- 建议先熟悉使用文档后再进行二次开发
流媒体服务器是一种用于分发流媒体的服务器端软件,可用于直播、监控、会议等需要实时观看音视频的场景。流媒体服务器区别于传统 Web 服务器对于实时性要求极高,需要使用各种传输协议,而 Web 服务器则主要以 http/https 协议为主。
Monibuca 由三部分组成:引擎、插件、实例工程。
- 引擎提供一套通用的流媒体数据缓存以及转发的机制,本身不关心协议如何实现
- 插件提供其他所有的功能,并可以无限扩展
- 实例工程是引入引擎和插件并启动引擎的项目工程,可以完全自己编写
插件式框架
Monibuca 旨在构建一个通用的流媒体开发生态,所以从 v1 版本开始就考虑到业务和流转发的解耦,从而设计了一套可供任意扩展的插件机制。根据你的需求场景,可以灵活引入不同类型的插件:
- 提供流媒体协议打包/解包,例如 rtmp 插件、rtsp 插件等
- 提供日志持久化的处理——logrotate 插件
- 提供录像功能——record 插件
- 提供丰富的调试功能——debug 插件
- 提供 http 回调能力——hook 插件
如果你是有经验的开发者,那么最佳的方式是在现有的插件基础上进行二次开发,并可向更多的人提供可重用的插件丰富生态。 如果你是流媒体的初学者,那么最佳的方式是利用现有的插件拼凑出你需要的功能,并向有经验的开发者寻求帮助。
常见业务场景
中转流服务器、视频客服、巡检(无人机、机房、码头、铁路、厂区)、停车场收费、设备报警回放、视频会议、直播间、语聊房、在线教育
主要功能
引擎方面
- 提供插件机制,对插件的启动,配置解析,事件派发等进行统一管理
- 提供 H264、H265、AAC、G711 格式的转发
- 提供可复用的 AVCC 格式、RTP 格式、AnnexB 格式、ADTS 格式等预封装机制
- 提供多 Track 机制,支持大小流,加密流扩展
- 提供 DataTrack 机制,可用于实现房间文字聊天等功能
- 提供时间戳同步机制,限速机制
- 提供 RTP 包乱序重排机制
- 提供订阅者追帧跳帧机制(首屏秒开)
- 提供发布订阅对外推拉的基础架构
- 提供鉴权机制的底层架构支持
- 提供内存复用机制
- 提供发布者断线重连机制
- 提供按需拉流机制
- 提供 HTTP 服务端口公用机制
- 提供 HTTP API 接口自动注册机制
- 提供 HTTP 接口中间件机制
- 提供结构化日志
- 提供流信息统计和输出
- 提供事件总线机制,可以对所有插件广播事件
- 提供配置热更新机制
插件方面
- 提供 RTMP 协议的推拉流,对外推拉流(支持 RTMPS)
- 提供 RTSP 协议的推拉流,对外推拉流
- 提供 HTTP-FLV 协议的拉流,对外拉流,读取本地 FLV 文件
- 提供 WebSocket 协议的拉流
- 提供 HLS 协议的拉流,对外拉流
- 提供 WebRTC 协议的推拉流
- 提供 GB28181 协议的推流,提供 dump 回放分析能力
- 提供 Onif 协议的支持
- 提供 WebTransport 协议的拉流
- 提供 fmp4 协议的拉流
- 提供边缘服务器功能,实现级联拉流
- 提供录像功能,支持 flv、mp4、hls、raw 格式
- 提供日志持久化功能,支持按天、按小时、按分钟、按秒、按大小、按文件数等多种方式
- 提供截屏功能
- 提供 HTTP 回调功能
- 提供预览功能(集成 Jessibuca Pro)
- 提供房间功能(可实现视频会议)
- 提供对接 Prometheus 的功能
第三方插件和收费插件提供更多额外功能,不在此罗列。
m7s admin pro
admin pro 提供了对 m7s 实例的可视化管理后台的能力,支持能力如下:
- 提供多实例管理功能
- 提供流详情显示
- 提供配置可视化编辑
- 提供日志可视化显示
- 提供插件可视化管理
- 提供 GB 设备管理
- 提供动态添加远程推拉流界面
- 提供 WebRTC 背景墙功能
- 提供多人视频演示
控制台页面如下图所示:
名称的由来
Monibuca 这个单词来源于 Monica
(莫妮卡),为了解决起名的难题,使用了三个名称分别是 Monica
、 Jessica
、Rebecca
用来代表服务器、播放器、推流器。由于莫妮卡、杰西卡、瑞贝卡,都带卡字,对直播来说寓意不好,所以改为莫妮不卡(Monibuca
)、杰西不卡Jessibuca、瑞贝不卡Monibuca。