简介
MMS 使用C++20的协程,来实现高效,易维护的实时流媒体服务器,相较于传统异步高性能服务器,减少了代码维护的复杂度,提高代码的可扩展性。
MMS 遵循开源的 MIT 协议,与 FFmpeg、OBS、VLC、WebRTC 等客户端配合使用,具备流媒体的采集、接收、协议转换与分发能力。采用典型的发布(推流)和订阅(播放)服务模型,MMS 可在不同协议之间高效转换,例如将 RTMP 推流转换为 HLS、HTTP-FLV 或 WebRTC 进行播放。
MMS 主要应用于直播场景,在直播方面支持如 RTMP、HLS、HTTP-FLV 等协议;在 WebRTC 方面,支持 WHIP 和 WHEP 等标准。它可作为核心媒体服务器,与多个开源工具组合构建完整的音视频解决方案。
为了便于系统集成与运维,MMS 提供了完整的 HTTP API 接口用于状态查询,同时支持 HTTP Callback,方便接入鉴权、事件通知与业务定制(如 DVR 控制)
MMS 面向开发者友好,推荐在 Ubuntu 22.04 环境中开发和调试,官方提供了基于 Ubuntu 22.04 构建的镜像。对初学者也非常友好,配有完整的入门指南、文档体系和常见问题解答,帮助用户快速上手。
支持的协议
MMS SERVER是一款基于 C++20 开发的高性能、实时流媒体服务器,专为直播和低延迟通信场景设计。它支持多种主流的直播协议,包括:
- RTMP / RTMPS
- HTTP / HTTPS-FLV
- HTTP / HTTPS-HLS
- HTTP / HTTPS-TS
- HTTP / HTTPS-DASH
- RTSP / RTSPS
- WebRTC
支持的编码
- h264/h265
- aac/g711/mp3/opus
鉴权
- 支持推拉流鉴权配置
- 支持回源转推鉴权配置
支持端流续传
- 只要流在一段时间(可配置)内,重新推上来,不会断开播放端,播放端可以接着继续播放,当然断流那段时间会卡住
支持录制
- 支持ts及flv的录制(mp4录制在路上)
支持域名证书配置
- 支持tls安全协议,证书可按域名配置
支持api回调
- 支持各种api回调,推流开始回调,推流结束回调,播放开始回调,录制开始回调,录制结束回调等
支持http api获取服务信息
- 支持获取服务器版本信息
- 支持获取服务器当前带宽,cpu使用率,内存使用率等信息
- 支持获取服务器当前各种协议流数量信息
- 支持获取某个域名下所有流的信息
- 支持获取某个接入点下所有流的信息
- 支持获取某个流的信息
静态文件服务器
- 内置一个静态文件服务器,支持直接播放录制文件
支持回源配置
- 接入点可配置回源协议,回源url,回源鉴权参数
编译
环境要求
- 目前只支持在linux环境下编译;
- 需安装支持C++20的GCC编译器,如gcc-13.以上版本;
- 需安装cmake 3.25.0以上版本;
- 需要安装 automake autoconf libtoool.
- 需要安装 golang 用于编译libboringssl.
- 需要安装 nasm/yasm 用于编译libav.
- 如果使用源码编译g++13.1或者以上版本,请用g++ -v确认编译的时的选项:
../configure --enable-bootstrap --enable-languages=c,c++,lto --prefix=/root/gcc-13.1 --with-bugurl=https://bugs.rockylinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --disable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --enable-offload-targets=nvptx-none --without-cuda-driver --enable-offload-defaulted --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_64=x86-64-v2 --with-build-config=bootstrap-lto --enable-link-serialization=1
否则可能出现一下链接错误,参考https://github.com/jbl19860422/mms-server/issues/2
源码编译
git clone https://github.com/jbl19860422/mms-server
cd mms-server
mkdir build && cd build
cmake .. && cmake -j4 install
编译期间,请确保网络正常,需要下载boost,ffmpeg等一些第三方库,需要较长时间。
配置
编译后,在mms-server/bin目录下,生成mms-live-server可执行文件,先别急着运行,先了解一下配置,MMS的配置文件,采用yaml的格式,为了简化处理,没有默认域名配置,用户需要自己先配置上域名配置才能推流,否则403 配置目录结构如下:
config/
├── mms.yaml
├── publish/
│ ├── test1.publish.com.yaml
│ └── test2.publish.com.yaml
├── play/
│ ├── test1.play.com.yaml
│ └── test2.play.com.yaml
- config是配置的主目录,mms.yaml是顶级配置文件,用来配置rtmp/http/rtsp/webrtc等服务器的端口。
- publish是推流域名的配置文件目录,例如test1.publish.com.yaml,表示test1.publish.com这个推流域名的配置文件。
- play是拉流域名的配置文件目录,例如test1.play.com.yaml,表示test1.play.com这个拉流域名的配置文件。
- 一个推流域名可以供多个拉流域名播放,在收到播放域名的播放请求时,会先查询推流域名下是否有相应的播放资源,如果有,则正常播放,否则404。
具体配置项说明,请参考![xxxxx]
启动
执行:
mms-live-server -c ./config -d
即可启动服务器,-d选项让日志输出到控制台,否则日志输出到日志文件。