各大主流媒体服务器的综合指标 PK

news2024/9/20 5:47:11

简述

随着互联网的发展,音视频行业越来越火,自然而然的流媒体服务器也是百花齐放。市面上也有很多种类的流媒体服务器,让人眼花缭乱。特别是对技术了解不深的朋友,更不知道怎么选择。
其实作为服务器,主要考察的无外乎几个核心指标,只要符合,基本上都是属于比较优秀的流媒体服务器。我简略说一说这些核心特性:

稳定性,性能,资源占用,并发能力,成本,可维护性

其实这些特性又不是独立存在的,相互影响彼此。比如:可维护性。可维护性分为两类,一个开发的可维护性,一个是运营的可维护性。开发的可维护性包括,软件整体架构清晰,模块耦合性低,层次清晰,
这样对于新业务的扩展比较容易,有问题也非常容易排查;这样的架构也为高效,稳定提供了基石;运营的可维护性,对于新业务的展开逻辑比较清晰,错误排查比较方便容易定位,运维人员维护性差的可能需要 3 个人,而维护性好的可以 1 个人搞定,大大节省了人员成本。同时,对硬件资源可以减少使用的台数,大大的节省运维费用。其实每一点都可以长篇累牍的去讲述它的优缺点,但偏离了本文的用意,这里就不一一列举了。

这里主要介绍几款个人感觉不错的流媒体服务器。 smart_rtmpd, nginx rtmp, srs, zlm 。明白人一眼就看出来,这些主要是 C, C++ 语言实现的服务器,没错。就像有的借助小汽车的底盘,有的借助摩托车地盘,
从起点很多别的语言的流媒体服务器就输了。 C, C++ 基本上属于性能最好的语言,性能上 C > C++, 不要和我抬杠说汇编。:)

名字开发语言
nginx rtmpC
smart_rtmpdC++
srsC++
zlmC++

基本情况介绍

smart_rtmpd 服务器

github 地址: https://github.com/superconvert/smart_rtmpd
gitee 地址: https://gitee.com/superconvert/smart_rtmpd

免费软件,支持 rtmp, rtsp, srt 推流,rtmp, rtsp, srt, hls, dash, http-flv, ws-flv, webrtc 拉流;支持 webrtc sfu 功能, 支持 VOD 功能,支持直播和录像; 特点,稳定,高效,简洁,跨平台,解压及运行,支持的操作系统 Windows, Ubuntun, CentOS, Debian, FreeBSD, ARM 64,无第三方依赖,基本上内核 + glibc 就能运行,软件体积非常小,配置相对简单,由于出道比下面三个晚,名气相对没有下面三个大。

nginx rtmp 服务器

github 地址:https://github.com/arut/nginx-rtmp-module
开源软件,由于 nginx rtmp 依托 nginx 底层,所以性能也是相对比较好的,但功能相对于其余三个,相对比较少一点,也是支持跨平台,需要准备第三方库及编译环境,针对不同的操作系统需要不同的环境配置进行编译适配,过多的功能和说明,请参考它们的 README.md

srs 服务器

github 地址:https://github.com/ossrs/srs
开源软件:srs 基于协程技术,对于单进程的能力挖掘相当强悍,单对于多核应用同时对于 webrtc 的功能支持也是比较全面。也是支持跨平台,需要配置对应的编译环境,过多的功能和说明,请参考它们的 README.md

zlm 服务器

github 地址:https://github.com/ZLMediaKit/ZLMediaKit
开源软件:目前是一个庞大的开发框架,不仅提供服务器的一些功能,还提供一些基础组件,对于国产化的相关规范支持的比较全。过多的功能和说明,请参考它们的 README.md

测试环境

测试一般分为三端,推流端,服务器,拉流端,为了保证公平公正合理的情况下,测试过程中,推流端不做任何更改,推流码率固定;拉流端不做任何更改;服务器端依次运行各个流媒体服务器软件,其它软硬件环境均保持不变。同样的硬件,既同样的 CPU, 内存,硬盘,网络。

软件条件说明:

服务器操作系统 Ubuntu 24.04.1 LTS ( 虚拟机 ) , CPU: 2 , Memory: 8G

软件编译器版本或源码分支说明
smart_rtmpdgcc 5.4.02024.09.16 乌班图多线程版本老的编译器进行编译,新编译器应该性能会更好
nginx rtmpgcc 13.2.0源码分支:2fb11dffaedc5af66b1442b0315c54a4b9da585d大家如果想验证测试结果可以自行选择最优分支进行验证
srsgcc 13.2.0源码分支:747831154742e6e4dee9b16f3a29fc6e01904e8c大家如果想验证测试结果可以自行选择最优分支进行验证
zlmgcc 13.2.0源码分支:da704ab2f1184c3c87be64fe18c9f413de101d0f大家如果想验证测试结果可以自行选择最优分支进行验证

推流软件

软件版本
OBS29.0.2
ffmpeg.exeversion 4.3.2-2021-02-02-full_build-www.gyan.dev Copyright © 2000-2021 the FFmpeg developers

拉流软件

软件版本
rtmpstress.exe
ffplay.exeversion 4.3.2-2021-02-02-full_build-www.gyan.dev Copyright © 2003-2021 the FFmpeg developers

测试场景及数据

测试分为三个场景,时延测试,拉流测试,推流测试

时延测试

推流 OBS + 浏览器网页截屏 ( 1920x1080, 8192 kb/s )
浏览器:在线秒表网页
测试协议:rtmp 推拉流

拉流 ffplay -fflags nobuffer rtmp://192.168.23.141:1935/live/stream
测试场景: 一路推流一路拉流,主要测试延时

说明smart rtmpdsrszlmnginx rtmp
1.1171.5061.6351.334
1.3371.6352.4511.333
1.2471.5072.1941.334
1.2461.5041.7211.291
1.3351.6443.4411.773
1.2871.5051.6771.290
1.2581.4601.6351.291
1.2471.5901.6341.290
1.3741.5481.6771.204
单位秒1.3761.6351.5921.376

拉流测试

推流 OBS ( 4096 kb/s )
测试协议:rtmp 推拉流
测试时长:10 分钟
拉流 rtmpstress.exe 一路推 800 路拉,主要系统指标

说明smart rtmpdsrszlmnginx rtmp
86%88%189%95.40%
123%98%200%97.40%
82%99%143%84.30%
23%53%OBS 断开,拉流 18794.80%
98%42%35.00%
89%6%95.50%
97%4%40.00%
102%OBS 断开,拉流全部断开94.80%
81%26.20%
38%95.00%
CPU 随机抽取 10 次
内存0.50%3.30%0.90%0.30%

结论 平均 CPU 占用率 smart_rtmpd 与 nginx rtmp 旗鼓相当,CPU 占用率相对较低,对于内存的占用也是相对较低,推拉流过程相对平稳,无异常,但 nginx rtmp 业务相对于其它三个服务器业务是最简单的,缓存或 IO 都是简化处理的,其次它是纯 C 实现的,语言上对性能的优化占有天然的优势。
压测过程中 srs 和 zlm 推流一段时间,推流端会产生断开现象,拉流端会出现全部断开的现象。
smart_rtmpd 的拉流链接由 800 路降低到 724 路, 而 nginx rtmp 的拉流链接数由 800 路降低到 664 路。
srs 协程模型只能用一个 CPU ,所以理论上 CPU 不会超过 100%

推流测试

说明smart rtmpdsrszlmnginx rtmp
CPU13.7% ~ 200%23.9% ~100%97.4% ~ 200%52.5% ~93.8%
内存13.60%6.00%11.90%0.40%
说明 top 查看网卡中断和服务器进程交替霸榜,CPU 大部分时间占用和 nginx 相差不多,但 CPU 最大值大于 nginx 。推流长时间有部分链接断开“协程(单进程,CPU 最大 100%, 推流长时间推流链接大量断开 )”推流长时间有部分链接断开top 查看网卡和服务器进程交替霸榜,表现相当不错,推流长时间链接没有断开

结论: CPU 表现相对优秀的是 nginx rtmp, smart_rtmpd
内存占用 smart_rtmpd 最多,不过缓冲队列是可配置的,没有降低配置降低内存占用,nginx rtmp 的内存占用比较优秀不过 smart_rtmpd, srs, zlm 的业务功能都比 nginx 复杂很多,内存占用过多是理所当然的,nginx 几乎就是做了一个简单解流封流转流的功能,所以系统的占用需求是最小的"

收尾

各位老铁想不想也想测试一下对比一下各个流媒体的性能呢?包括软件的便利性,兼容性,部署成本,维护成本,可维护性做一个全面的对比。欢迎各位老铁拿出您的数据与结论,选出您最喜欢的流媒体服务器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL数据库迁移与备份实录

这里写目录标题 事情起因的概述查看磁盘空间使用情况为了进一步的明确宕机原因,查看MySQL日志信息进一步排查 如何针对磁盘空间不足进行挂载区域的修改以及数据的迁移与备份分析与梳理如何修改MySQL数据卷的挂载位置停止MySQL服务备份 MySQL 配置文件迁移 MySQL 数据…

MTK zephyr平台:USB升级、枚举流程

一、USB升级流程 通过代码及log分析,当前平台升级过程在PL阶段进行 USB download相关代码 mtk/modules/hal/boot/preloader/platform/flashc/ mtk/modules/hal/boot/preloader/platform/board_name/flash/ mtk/modules/hal/boot/preloader/platform/board_name/src/drive…

【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

开放标准如何破解企业数字化与可持续发展的困境:The Open Group引领生态系统架构创新

应对数字化与可持续发展的双重挑战,开放标准是关键 在当今快速变化的商业环境中,企业不仅需要通过数字化转型提升竞争力,还面临日益严格的可持续发展要求。开放标准正在成为企业破解这一双重挑战的核心工具。The Open Group 2024生态系统架构…

智能BI项目第四期

开发图表管理功能 规划思路 首先需要做一个列表页。后端已经在星球提供了一个基础的万能项目模板,包含增删改查接口,我们只需要在此基础上进行定制化开发即可。所以本期后端的开发量不多,只需要复用即可,主要是前端。 规划功能…

【IPV6从入门到起飞】5-4 IPV6+Home Assistant(ESP32+MQTT+ILI9488)远程留言墙

IPV6Home Assistant[ESP32MQTTILI9488]远程留言墙 1 背景2 Home Assistant 配置2-1 配置 yaml2-2 效果 3 ESP32 配置3-1 使用 TFF_eSPI 库3-2 修改默认的SPI屏幕配置文件3-3 接线3-4 ESP32 工程代码 4 测试4-1 留言板设置内容4-2 ESP32 屏幕显示 5 后记 1 背景 在前面我们的几…

自动驾驶中的决策规划技术分享--轻舟智航

文章目录 0.概述:1 导航模块2 决策模块2.1 车道决策2.2 障碍物决策 3 轨迹规划3.1 时空分离规划3.2 时空联合规划 4 对比 0.概述: 李仁杰,轻舟智航规划算法负责人,自动驾驶决策与规划技术专家。 在自动驾驶系统中,决策…

Win10 录屏秘籍大公开:从新手到高手的进阶之路

之前因为某些原因不方便到客户那里进行软件培训,我们就发现录屏讲解供客户随时查看的方式好像更有效果。这次我就介绍一些能够实现win10怎么录屏操作的工具讲解。 1.福昕录屏大师 链接:www.foxitsoftware.cn/REC/ 这个工具是一款专业的电脑录屏软件&a…

SVN泄露 CTFHUB 解题笔记

参考大佬链接CTFHub | SVN泄露_ctfhubsvn泄露-CSDN博客 先下载插件 然后把GIT;里面的代码 乱盘上去 python2 不知道需不需要 先装了 再说。。。我的是裸机~ 开始作妖模式 Ubuntu 22.10 | Installati.one 上面一行的代码 链接 下面 插件 GITHUB页面下面的代码 d…

企业网络安全关键:防御措施和应急响应

感谢浪浪云支持发布 浪浪云活动链接 :https://langlangy.cn/?i8afa52 文章目录 什么是网络安全常见的网络安全威胁病毒和恶意软件网络钓鱼拒绝服务攻击中间人攻击社会工程学 基本的网络安全措施强密码策略双因素认证安装和更新防病毒软件定期备份 高级的网络安全方…

Java-面向对象编程(基础部分)

类和对象的区别和联系 类:类是封装对象的属性和行为的载体,在Java语言中对象的属性以成员变量的形式存在,而对象的方法以成员方法的形式存在。 对象:Java是面向对象的程序设计语言,对象是由类抽象出来的,…

使用 MobaXterm 远程连接 Linux 虚拟机并实现文件传输

文章目录 前言一、什么是 MobaXterm二 、MobaXterm 安装三、使用 MobaXterm 远程连接 Linux 虚拟机1. 准备工作2. 创建 SSH 连接3. 登录虚拟机 四、使用 MobaXterm 进行文件传输总结 前言 在日常开发和运维中,Windows 用户经常需要通过远程连接到 Linux 服务器进行…

链式栈讲解

文章目录 🍊自我介绍🍊链式栈入栈和出栈linkstack.hlinkstack.c 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介绍 Hello,大家好,我是小珑也要…

UBUNTU20.04安装CH384串口卡驱动

继续上文:统信UOS安装CH384串口卡驱动-CSDN博客 统信UOS系统成功安装CH384串口驱动后,继续在ubuntu20.04下安装驱动,发现一直报错,原因是内核驱动不一致。 解决办法: 1. 下载最新的驱动。CH35XCH384驱动源文件资源-C…

【WPF】02 按钮控件圆角配置及状态切换

按钮圆角 先从工具箱里拖进来一个Button控件&#xff0c;然后对这个按钮进行美化。 首先在 xaml 里按钮控件部分 添加如下代码&#xff1a; <Button x:Name"btnLogin" Content"登录" HorizontalAlignment"Center" Margin"0,399,0,0&q…

报错合计-1

向开发描述&#xff1a;先勾选一个病灶后复制&#xff0c;控制台报错 报错类型查询后为前端DOM节点相关报错&#xff0c;提给前端开发 报错解释&#xff1a; TypeError: Failed to execute selectNode on Range: parameter 1 is not of type Node 这个错误表明你尝试使用 Range…

【机器学习】:深潜智能的底层逻辑、前沿探索与未来展望】

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 在科技的浩瀚星空中&#xff0c;机器学习犹如一颗璀璨的新星&#xff0c;以其独特的魅力和无限潜力&#xff0c;引领着我们向智能的深处探索。今天&#xff0c;我们将一同踏上这场深度之旅&#xff0c;不仅解析…

AI时代,服务器厂商能否打破薄利的命运?

文&#xff5c;刘俊宏 编&#xff5c;王一粟 AI大模型正在引发新一轮的“算力焦渴”。 近日&#xff0c;OpenAI刚发布的o1大模型再次刷新了大模型能力的上限。对比上一次迭代的版本&#xff0c;o1的推理能力全方位“吊打”了GPT-4o。更优秀的能力&#xff0c;来自与o1将思维…

Flink官方文档

Flink官方文档&#xff08;全面、详细&#xff09;&#xff1a;https://nightlies.apache.org/flink/flink-docs-master/zh/

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL24

边沿检测 有一个缓慢变化的1bit信号a&#xff0c;编写一个程序检测a信号的上升沿给出指示信号rise&#xff0c;当a信号出现下降沿时给出指示信号down。 注&#xff1a;rise,down应为单脉冲信号&#xff0c;在相应边沿出现时的下一个时钟为高&#xff0c;之后恢复到0&#xff0…