常见流媒体服务器方案对比分析

蓝皮鼠 蓝皮鼠 | 129 | 2022-06-30

前言
目前市面上有很多开源的流媒体服务器解决方案,常见的有 SRS、EasyDarwin、ZLMediaKit 和 Monibuca 等,我们应该怎么选择呢?

正文
今天这篇文章主要介绍 SRS、EasyDarwin、ZLMediaKit 和 Monibuca 的一些对比情况,可以作为日后调研选型的参考文档。

SRS

SRS 目前已经更新到 3.0,功能和稳定性较之前的版本都有非常大的提升,新入门的同学可以考虑直接从 3.0 上手。接下来,我们从使用、配置、功能几个方面介绍 SRS。

使用步骤
我们自己可以非常方便的搭建一套 SRS 服务器,具体的配置步骤如下:

  1. 获取源码
地址:https://github.com/ossrs/srs

具体命令如下:
git clone https://gitee.com/winlinvip/srs.oschina.git srs &&cd srs/trunk && git remote set-url origin https://github.com/ossrs/srs.git && git pull
  1. 编译

./configure && make 

其中,configure 文件是支持可配置的。 
  1. 运行
./objs/srs -c conf/srs.conf 

其中,srs.conf 文件是支持可配置的,针对不同功能模块,还有单独对应的配置文件。比如,rtmp 模块对应的配置文件是 rtmp.conf。

另外,我们还可以直接运行现有的 docker 镜像,命令:

docker run -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/ossrs/srs:3

主要功能
SRS 作为当前非常普遍的运营级解决方案,具备非常全面的功能,包括集群、协议网关、CDN 功能等,主要功能如下:

  1. SRS 定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。

  2. SRS 提供了丰富的接入方案将 RTMP 流接入 SRS, 包括推送 RTMP 到 SRS、推送 RTSP/UDP/FLV 到 SRS、拉取流到 SRS。 SRS 还支持将接入的 RTMP 流进行各种变换,譬如将 RTMP 流转码、流截图、 转发给其他服务器、转封装成 HTTP-FLV 流、转封装成 HLS、 转封装成 HDS、转封装成 DASH、录制成 FLV/MP4。

  3. SRS 包含支大规模集群如 CDN 业务的关键特性, 譬如 RTMP 多级集群、源站集群、VHOST 虚拟服务器 、 无中断服务 Reload、HTTP-FLV 集群。

  4. SRS 还提供丰富的应用接口, 包括 HTTP 回调、安全策略 Security、HTTP API 接口、 RTMP 测速。

  5. SRS 在源站和 CDN 集群中都得到了广泛的应用 Applications。

EasyDarwin

EasyDarwin 是由国内开源流媒体团队维护和迭代的一整套开源流媒体视频平台框架,Golang 开发,从 2012 年 12 月创建并发展至今,包含有单点服务的开源流媒体服务器,和扩展后的流媒体云平台架构的开源框架,开辟了诸多的优质开源项目,能更好地帮助广大流媒体开发者和创业型企业快速构建流媒体服务平台,更快、更简单地实现最新的移动互联网(安卓、iOS、H5、微信)流媒体直播与点播的需求,尤其是安防行业与互联网行业的衔接。

使用步骤
运行 EasyDarwin 也非常方便,具体的配置步骤如下:

  1. 获取源码

地址:https://github.com/EasyDarwin/EasyDarwin

具体命令如下:

mkdir EasyDarwin && cd EasyDarwin

git clone https://github.com/EasyDarwin/EasyDarwin.git --depth=1 EasyDarwin

  1. 以开发模式运行

npm run dev

  1. 以开发模式运行前端

npm run dev:www

主要功能

  1. 基于 Golang 语言开发维护。

  2. 支持 Windows、Linux、macOS 三大系统平台部署。

  3. 支持 RTSP 推流分发(推模式转发)。

  4. 支持 RTSP 拉流分发(拉模式转发)。

  5. 服务端录像、检索、回放。

  6. 支持关键帧缓存、秒开画面。

  7. Web 后台管理。

  8. 分布式负载均衡。

ZLMediaKit

ZLMediaKit 是一套高性能的流媒体服务框架,目前支持 rtmp、rtsp、hls、http-flv 等流媒体协议,支持 linux、macos、windows 三大 PC 平台和 ios、android 两大移动端平台。

使用步骤

  1. 获取源码。

地址:https://github.com/xia-chu/ZLMediaKit

具体命令如下:

#国内用户推荐从同步镜像网站 gitee 下载

git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit

cd ZLMediaKit

#千万不要忘记执行这句命令

git submodule update --init

  1. 编译(这里以 linux 和 mac OS 系统为例)

cd ZLMediaKit

mkdir build

cd build

#macOS 下可能需要这样指定 openss 路径:cmake .. -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2j/

cmake ..

make -j4

  1. 运行
cd ZLMediaKit/release/linux/Debug

#通过-h 可以了解启动参数

./MediaServer -h

#以守护进程模式启动

./MediaServer -d &

主要功能

  1. 基于 C++11 开发,避免使用裸指针,代码稳定可靠,性能优越。

  2. 支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4),支持协议互转。

  3. 使用多路复用/多线程/异步网络 IO 模式开发,并发性能优越,支持海量客户端连接。

  4. 代码经过长期大量的稳定性、性能测试,已经在线上商用验证已久。

  5. 支持 linux、macos、ios、android、windows 全平台。

  6. 支持画面秒开、极低延时(500 毫秒内,最低可达 100 毫秒)。

  7. 提供完善的标准 C API,可以作 SDK 用,或供其他语言调用。

  8. 提供完整的 MediaServer 服务器,可以免开发直接部署为商用服务器。

  9. 提供完善的 restful api 以及 web hook,支持丰富的业务逻辑。

  10. 打通了视频监控协议栈与直播协议栈,对 RTSP/RTMP 支持都很完善。

  11. 全面支持 H265/H264/AAC/G711/OPUS。

Monibuca

Monibuca 是一个开源的 Go 语言实现的流媒体服务器开发框架,采取了引擎+插件(s)的方式,实现了定制化流媒体服务器的功能。

架构图:

9a7eb297b22e4f1aa362cf404540e52c

使用步骤

  1. 源码地址

地址:https://github.com/Monibuca

  1. 以 monica 为例进行介绍,monica 是一个实例管理器,用于创建 Monibuca 的实例工程目录文件,以及控制实例的更新和重启等。

2.1 安装 monica

go get github.com/Monibuca/monica

2.2 指定端口运行,默认是 8000

monica -port 8001

主要功能

  1. 针对流媒体服务器独特的性质进行的优化,充分利用 Golang 的 goroutine 的性质对大量的连接的读写进行合理的分配计算资源,以及尽可能的减少内存 Copy 操作。使用对象池减少 Golang 的 GC 时间。

  2. 专为二次开发而设计,基于 Golang 语言,开发效率更高;独创的插件机制,可以方便用户定制个性化的功能组合,更高效率的利用服务器资源。

  3. 功能强大的仪表盘可以直观的看到服务器运行的状态、消耗的资源、以及其他统计信息。用户可以利用控制台对服务器进行配置和控制。点击右上角菜单栏里面的演示,可以看到演示控制台界面。

  4. 纯 Go 编写,不依赖 cgo,不依赖 FFMpeg 或者其他运行时,部署极其方便,对服务器的要求极为宽松。

结尾
最后附上它们四个的对比图表,这样更加的直观形象。

对比图表

87468fb2a8ea4f118b2f7f3846ff6edc

文章标签: 流媒体
推荐指数:

真诚点赞 诚不我欺~

常见流媒体服务器方案对比分析

点赞 收藏 评论