从0-1开始 测试ZLMediaKit推拉流性能、延时性能

news2024/10/7 16:27:18

流媒体开发系列文章


文章目录

  • 流媒体开发系列文章
  • 前言
  • 一、环境准备?
  • 二、拉流测试过程
  • 三、推流测试过程
  • 三、延时测试
  • 总结


前言

目前、比较有名的流媒体服务器有ZLMediaKit、srs、live555、eadydarwin等。因为srs是单线程服务、对于多核服务器的支持需要通过部署多个服务来充分利用多核特性,本文主要介绍一种通用的简单的可利用多核特性的流媒体服务器是ZLMediaKit,另外一方面其支持多种流媒体协议 rtsp、rtmp、httpflv、hls、fmp4、webrtc等,而且支持视频的直播、录制等功能。

流媒体服务器是流媒体应用的核心系统,是运营商向用户提供视频服务的关键平台。流媒体服务器的主要功能是对流媒体内容进行采集、缓存、调度和传输播放。流媒体应用系统的主要性能体现都取决于媒体服务器的性能和服务质量。因此,流媒体服务器是流媒体应用系统的基础,也是最主要的组成部分。


一、环境准备?

测试日期:2023/1/25
代码版本:git hash: 44f4e9acd434e5549276332aa454be18844db3a8
cpu: Intel® Core™ i7-10510U CPU @ 1.80GHz
操作系统:CentOS release 7.5(Final)
内存:6GB
网卡:127.0.0.1
测试码流: 1min.14000kbps.1080p.flv
编译器:gcc (GCC) 7.5
zlmediakit编译类型:Release(目标)
malloc库:ptmalloc(未开启jemalloc)
config.ini配置文件修改(主要开启合并写、按需转协议)

软件安装
1、zlmediakit 编译安装,参考安装运行zlm流程
2、nload (yum install nload)或者dstat(yum install dstat) dstat -N eth0/lo 30
3、perf(yum install perf)
4、1min.flv视频文件 h264+aac

二、拉流测试过程

推流命令

ffmpeg -stream_loop -1 -re -i /opt/data/code/ZLMediaKit/Download/1min.flv -acodec copy -vcodec copy -f flv  rtmp://127.0.0.1/live/test

加大文件描述符个数

ulimit -n 102400
#启动1万个rtmp拉流
./test_bench_pull -c 1000 -i rtmp://127.0.0.1/live/test
查看建立的连接
netstat -anp|grep MediaServer|grep ESTABLISHED|wc -l

2.1 当对配置文件不做任何修改时,即mergeWriteMS=300,protocol_demand=1时
当路数增加到2000路时,发现运行一会就会出现send timeout,应该时系统调度不过来导致的。目前简单测试的话,能够稳定在1500左右,此时mediaserver 的cpu利用率已经200+%,test_bench_pull 150%+, load已经接近cpu个数的两倍了,性能达到了瓶颈。
在这里插入图片描述
在这里插入图片描述

top信息:
100路:
在这里插入图片描述

500路:
在这里插入图片描述

1000路
在这里插入图片描述
1500路:
在这里插入图片描述

2000路:已经不稳定了会出现路数降低,send timeout的问题。
在这里插入图片描述

nload信息:
100路
14000100=14Mbps100=1.4Gbps
在这里插入图片描述
500路
14000500=14Mbps1005=1.4Gbps5=7Gbps
在这里插入图片描述
1000路
13Gbps
在这里插入图片描述
1500路:
在这里插入图片描述

2000路:
27Gbps
在这里插入图片描述

三、推流测试过程

当路数增加到1000路时,发现运行一会就会出现send timeout,应该时系统调度不过来导致的。目前简单测试的话,能够稳定在700左右,此时mediaserver 的cpu利用率已经200+%,test_bench_pull 50%+, load已经接近cpu个数的两倍了,性能达到了瓶颈。

推流命令

ffmpeg -stream_loop -1 -re -i /opt/data/code/ZLMediaKit/Download/1min.flv -acodec copy -vcodec copy -f flv  rtmp://127.0.0.1/live/test

加大文件描述符个数

ulimit -n 102400
#启动1万个rtmp推流
./test_bench_push -i rtmp://127.0.0.1/live/test -c 100 -o rtmp://127.0.0.1/live/push

查看建立的连接
netstat -anp|grep MediaServer|grep ESTABLISHED|wc -l

推流100路:
在这里插入图片描述
top
100路:
在这里插入图片描述
500路:
在这里插入图片描述
1000路:
在这里插入图片描述

nload
100路:
在这里插入图片描述
500路:
在这里插入图片描述
1000路:
在这里插入图片描述

三、延时测试

合并写延时改成0时(默认为0)即为最低延时模式; 大家测试延时时,可以使用webrtc播放来测试。

环境准备
网络环境:window push -》虚拟机linux server-》window play(同一台机器上运行)
操作系统:linux
服务器:启动参数 -t 1 ,单线程启动(避免线程之间切换)

测试方法
打开浏览器,打开在线秒表网页 https://miaobiao.51240.com/
设置OBS,截取浏览器秒表部分图像,开始推流给MediaServer
打开ffplay(nobuffer),播放对应的rtsp或rtmp url
使用截图工具,定格画面,并对比网页与ffplay播放器画面在线秒表时间差

obs设置:
在这里插入图片描述

在这里插入图片描述

推流地址:rtmp://192.168.31.49/live/test
拉流地址:rtmp://192.168.31.49/live/test
用vlc播放 延时2-3s,图1
用ffplay播放 延时<1s 图2 (ffplay -fflags nobuffer -i rtmp://192.168.31.49/live/test)

图1
图1
图2:
图2
其中srs中表示rtmp的延时可以做到0.8s
在这里插入图片描述


总结

目前在虚拟机上测试,基于本电脑运行了太多软件,实际应该比我测试的数据要高。通过本文的基本测试,推流1080p视频文件,按照14kpbs的码率进行推送,得出来部分性能路数以及播放时延效果。

通过本文的学习,希望对你有所帮助。

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

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

相关文章

pytorch深度学习基础(十一)——常用结构化CNN模型构建

结构化CNN模型构建与测试前言GoogLeNet结构Inception块模型构建resNet18模型结构残差块模型构建denseNet模型结构DenseBlocktransition_block模型构建结尾前言 在本专栏的上一篇博客中我们介绍了常用的线性模型&#xff0c;在本文中我们将介绍GoogleNet、resNet、denseNet这类…

APT之木马静态免杀

前言 这篇文章主要是记录手动编写代码进行木马免杀&#xff0c;使用工具也可以免杀&#xff0c;只不过太脚本小子了&#xff0c;而且工具的特征也容易被杀软抓到&#xff0c;指不定哪天就用不了了&#xff0c;所以要学一下手动去免杀木马&#xff0c;也方便以后开发一个只属于…

blender导入骨骼动画方法[psa动作]

先导入女性的psk文件 然后调整缩放大小和人物一样,包括角度朝向. ctrla应用所有改变 然后选择psk文件以及其他人物模型的全部 ,然后 在Layout-物体-父级 -附带空顶相点组 image.png之后会发现所有人物多了修改器,点击其中一个修改器 点添加修改器 -数据传递 勾选顶点数据-选择顶…

人员动作行为AI分析系统 yolov5

人员动作行为AI分析系统通过pythonyolo系列网络学习模型&#xff0c;对现场画面人员行为进行实时分析监测&#xff0c;自动识别出人的各种异常行为动作&#xff0c;立即抓拍存档预警同步回传给后台。 我们使用YOLO算法进行对象检测。YOLO是一个聪明的卷积神经网络(CNN)&#xf…

带滤波器的PID控制仿真-1

采用低通滤波器可有效地滤掉噪声信号&#xff0c;在控制系统的设计中是一种常用的方法。基于低通滤波器的信号处理实例设低通滤波器为&#xff1a;采样时间为1ms&#xff0c;输入信号为带有高频正弦噪声&#xff08; 100Hz&#xff09;的低频&#xff08;0.2Hz)正弦信号。采用低…

离散数学与组合数学-05树

文章目录离散数学与组合数学-05树5.1 认识树5.1.1 树的模型5.1.2 树的应用5.2 无向树5.2.1 定义5.2.2 树的性质5.2.3 性质应用5.3 生成树5.3.1 引入5.3.2 定义5.3.3 算法5.3.4 应用5.4 最小生成树5.4.1 引入5.4.2 定义5.4.3 算法5.5 根树5.5.1 根数定义5.5.2 倒置法5.5.3 树的家…

【编程入门】开源记事本(SwiftUI版)

背景 前面已输出多个系列&#xff1a; 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记&#xff0c;将更为简化&#xff0c;去掉了网络调用&#xff0…

C++模板进阶

这篇文章是对模板初阶的一些补充&#xff0c;让大家在进行深一层的理解。 文章目录1. 非类型模板参数2. 模板的特化2.1 概念2.2 函数模板特化2.3 类模板特化2.3.1 全特化2.3.2 偏特化2.4 类模板特化应用示例3 模板分离编译3.1 什么是分离编译3.2 模板的分离编译3.3 解决方法4.…

【各种**问题系列】什么是 LTS 长期支持

目录 &#x1f341; 什么是长期支持&#xff08;LTS&#xff09;版本&#xff1f; &#x1f342; LTS 版本的优点&#xff1a; &#x1f341; 什么是 Ubuntu LTS&#xff1f; &#x1f342; Ubuntu LTS 软件更新包括什么&#xff1f; 在 Linux 的世界里&#xff0c;特别是谈…

【Java开发】Spring Cloud 08 :链路追踪

任何一个架构难免会出现bug&#xff0c;微服务相比于单体架构日志查询更为困难&#xff0c;因此spring cloud推出了Sleuth等组件的链路追踪技术来实现报错信息的定位及查询。项目源码&#xff1a;尹煜 / coupon-yinyu GitCode1 调用链追踪我们可以想象这样一个场景&#xff0c…

单一数字评估指标、迁移学习、多任务学习、端到端的深度学习

目录1.单一数字评估指标(a single number evaluation metric)有时候要比较那个分类器更好&#xff0c;或者哪个模型更好&#xff0c;有很多指标&#xff0c;很难抉择&#xff0c;这个时候就需要设置一个单一数字评估指标。例1&#xff1a;比较A&#xff0c;B两个分类器的性能&a…

Android MVVM的实现

Android MVVM的实现 前言&#xff1a; 在我们写一些项目的时候&#xff0c;通常会对一些常用的一些常用功能进行抽象封装&#xff0c;简单例子&#xff1a;比如BaseActivity&#xff0c;BaseFragment等等…一般这些Base会去承载一些比如标题栏&#xff0c;主题之类的工作&…

提权漏洞和域渗透历史漏洞整理

Windows提权在线辅助工具 https://i.hacking8.com/tiquan/&#x1f334;Kernel privilege escalation vulnerability collection, with compilation environment, demo GIF map, vulnerability details, executable file (提权漏洞合集) https://github.com/Ascotbe/Kernelhu…

恶意代码分析实战 13 反调试技术

13.1 Lab16-01 首先&#xff0c;将可执行文件拖入IDA中。 我们可以看到有三处都调用了sub_401000函数&#xff0c;并且代码都在哪里停止执行。由于没有一条线从这些方框中引出&#xff0c;这就意味着函数可能终止了程序。 右侧每一个大框中都包含一个检查&#xff0c;这个检查…

Makefile学习②:Makefile基本语法

Makefile学习②&#xff1a;Makefile基本语法 Makefile基本语法 目标&#xff1a; 依赖 &#xff08;Tab&#xff09;命令 目标&#xff1a;一般是指要编译的目标&#xff0c;也可以是一个动作 依赖&#xff1a;指执行当前目标所要依赖的先项&#xff0c;包括其他目标&#xf…

neural collaborative filtering 阅读笔记

本文主要介绍了一种一种基于神经网络的技术&#xff0c;来解决在含有隐形反馈的基础上进行推荐的关键问题————协同过滤。 2.1 Learning from Implicit Data yui1,(ifinteraction(useru,itemi)isobserved)y_{ui} 1,(if interaction (user u, item i) is observed)yui​1,(…

还在为ElementUI的原生校验方式苦恼吗,快用享受element-ui-verify插件的快乐吧(待续)

element-ui-verify 本文章意在介绍element-ui-verify插件使用&#xff0c;以及对比elementUI原生校验方式&#xff0c;突显该插件用少量代码也能实现原生的校验效果甚至更好。 1.先观察一个示例 <template><d2-container><el-form :model"ruleForm&qu…

二叉树超级经典OJ题

目录1.根据二叉树创建字符串2.二叉树的层序遍历3.二叉树的层序遍历II4.二叉树的最近公共祖先5.二叉搜索树与双向链表6.从前序与中序遍历序列构造二叉树1.根据二叉树创建字符串 根据二叉树创建字符串 给你二叉树的根节点root&#xff0c;请你采用前序遍历的方式&#xff0c;将二…

编码器M法测速仿真(Simulink)

编码器M法和T法测速的详细讲解可以参看下面的文章链接,这里不再赘述,这里主要介绍Simulink里建模仿真,带大家从另一个角度理解编码器测速原理。 PLC通过编码器反馈值计算速度的推荐做法(算法解析+ST代码)_RXXW_Dor的博客-CSDN博客_编码器计算速度程序实例PLC如何测量采集编…

Power BI中类似Vlookup的查询筛选功能如何实现

一、问题描述 在Excel中有一个非常经典的函数Vlookup&#xff0c;可以通过首列查找&#xff0c;返回相对应的其他列的值。这种功能&#xff0c;在Power BI中没有Vlookup函数&#xff0c;那么该如何实现这一功能呢&#xff1f;下面通过一个实例做分析演示。 二、数据源 已知某…