SRS压测--SRS-Bench

SRS压测--SRS-Bench

    • 简介
    • 编译和使用:
      • 问题1:
      • 问题2:
      • 问题3:
    • Player for Live(**直播播放压测**)
    • Publisher for Live or RTC(**直播或会议场景推流压测**)
    • 4.Multipel Player or Publisher for RTC(会议场景的播放压测)
    • 5.DVR 录制场景:
    • 6.RTC Plaintext(压测RTC明文播放)
    • 7.Regression Test(回归测试)
    • 8.GB28181 Test

简介

SRS-Bench 是一个用于流媒体服务的性能测试工具,它支持多种协议,包括 HTTP-FLV、RTMP、HLS 和 WebRTC 等。

编译和使用:

克隆仓库并切换到相应的分支:

//克隆仓库并切换到相应的分支
git clone https://github.com/ossrs/srs-bench.git && git checkout feature/rtc
//编译
make
//帮助手册
./objs/srs_bench -h

注意:编译可能遇到的问题

问题1:

gofmt:命令未找到
解决:需要安装golang环境,并配置环境路径

问题2:

# golang.org/x/sys/unix
vendor/golang.org/x/sys/unix/ioctl_unsigned.go:19:6: IoctlSetInt redeclared in this blockvendor/golang.org/x/sys/unix/ioctl.go:19:6: other declaration of IoctlSetInt
vendor/golang.org/x/sys/unix/ioctl_unsigned.go:27:6: IoctlSetPointerInt redeclared in this blockvendor/golang.org/x/sys/unix/ioctl.go:27:6: other declaration of IoctlSetPointerInt
vendor/golang.org/x/sys/unix/ioctl_unsigned.go:35:6: IoctlSetWinsize redeclared in this blockvendor/golang.org/x/sys/unix/ioctl.go:35:6: other declaration of IoctlSetWinsize
vendor/golang.org/x/sys/unix/ioctl_unsigned.go:44:6: IoctlSetTermios redeclared in this blockvendor/golang.org/x/sys/unix/ioctl.go:46:6: other declaration of IoctlSetTermios
vendor/golang.org/x/sys/unix/ioctl_unsigned.go:54:6: IoctlGetInt redeclared in this blockvendor/golang.org/x/sys/unix/ioctl.go:58:6: other declaration of IoctlGetInt
vendor/golang.org/x/sys/unix/ioctl_unsigned.go:60:6: IoctlGetWinsize redeclared in this blockvendor/golang.org/x/sys/unix/ioctl.go:64:6: other declaration of IoctlGetWinsize
vendor/golang.org/x/sys/unix/ioctl_unsigned.go:66:6: IoctlGetTermios redeclared in this blockvendor/golang.org/x/sys/unix/ioctl.go:70:6: other declaration of IoctlGetTermios
# golang.org/x/crypto/curve25519
vendor/golang.org/x/crypto/curve25519/curve25519_compat.go:17:6: scalarMult redeclared in this blockvendor/golang.org/x/crypto/curve25519/curve25519_amd64.go:62:6: other declaration of scalarMult
make: *** [objs/srs_bench] 错误 2

解决:执行go get golang.org/x/sys/unix,该库不是golang本身的库,因此需要执行go get命令下载golang.org/x/sys/unix

问题3:

go build -mod=vendor -o objs/srs_bench .
go: inconsistent vendoring in /home/hnb/workspace/code/srs-bench:golang.org/x/sys@v0.20.0: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txtgolang.org/x/sys@v0.8.0: is marked as explicit in vendor/modules.txt, but not explicitly required in go.mod

解决:执行go mod vendor
编译生成文件

pcap_simulator模拟真实的网络流量,包括视频流、音频流或其他类型的数据流。
srs_bench压测,模拟大量客户端的负载测试,支持SRS、GB28181和Janus三种场景
srs_blackbox_test黑盒测试(SRS),SRS服务器的黑盒测试,也可以换成其他媒体服务器
srs_gb28181_test回归测试(GB28181),GB服务器的回归测试
srs_test回归测试(SRS),SRS服务器的回归测试

Player for Live(直播播放压测)

直播播放压测,一个流,很多个播放。
首先,推流到SRS:

ffmpeg -re -i doc/source.200kbps.768x320.flv -c copy -f flv -y rtmp://localhost/live/livestream

然后,启动压测,例如模拟 100 个播放客户端

./objs/srs_bench -sr webrtc://localhost/live/livestream -nn 100

Publisher for Live or RTC(直播或会议场景推流压测)

直播或会议场景推流压测,一般会推多个流。
推流依赖于录制的文件,可以参考 DVR 功能。
启动推流压测,例如 100 个流:

./objs/srs_bench -pr webrtc://localhost/live/livestream_%d -sn 100 -sa a.ogg -sv v.h264 -fps 25

注意:帧率是原始视频的帧率,由于 H.264 中没有这个信息,所以需要传递。

4.Multipel Player or Publisher for RTC(会议场景的播放压测)

启动推流压测,例如 3 个流:

./objs/srs_bench -pr webrtc://localhost/live/livestream_%d -sn 3 -sa a.ogg -sv v.h264 -fps 25

然后,每个流都启动播放压测,例如每个流 2 个播放:

./objs/srs_bench -sr webrtc://localhost/live/livestream_%d -sn 3 -nn 2

备注:压测都是基于流,可以任意设计推流和播放的流路数,实现不同的场景。
备注:URL的变量格式参考Go的fmt.Sprintf,比如可以用webrtc://localhost/live/livestream_%03d。

5.DVR 录制场景:

录制场景,主要是把内容录制下来后,可分析,也可以用于推流。
首先,推流到SRS

ffmpeg -re -i doc/source.200kbps.768x320.flv -c copy -f flv -y rtmp://localhost/live/livestream

然后,启动录制:

./objs/srs_bench -sr webrtc://localhost/live/livestream -da a.ogg -dv v.h264

备注:录制下来的a.ogg和v.h264可以用做推流。

6.RTC Plaintext(压测RTC明文播放)

首先,推流到SRS

ffmpeg -re -i doc/source.200kbps.768x320.flv -c copy -f flv -y rtmp://localhost/live/livestream

然后,启动压测,指定是明文(非加密),比如100个:

./objs/srs_bench -sr webrtc://localhost/live/livestream -da a.ogg -dv v.h264

7.Regression Test(回归测试)

需要先启动SRS,支持WebRTC推拉流:

然后运行回归测试用例,如果只跑一次,可以直接运行:

go test ./srs -mod=vendor -v -count=1

也可以用make编译出重复使用的二进制:

make && ./objs/srs_test -test.v

make && ./objs/srs_test -test.v
Note: 注意由于pion不支持DTLS 1.0,所以SFU必须要支持DTLS 1.2才行。
运行结果如下:

$ make && ./objs/srs_test -test.v
=== RUN   TestRTCServerVersion
--- PASS: TestRTCServerVersion (0.00s)
=== RUN   TestRTCServerPublishPlay
--- PASS: TestRTCServerPublishPlay (1.28s)
PASS

可以给回归测试传参数,这样可以测试不同的序列,比如:

go test ./srs -mod=vendor -v -count=1 -srs-server=127.0.0.1
# Or
make && ./objs/srs_test -test.v -srs-server=127.0.0.1

可以只运行某个用例,并打印详细日志,比如:

支持的参数如下:

-srs-server,RTC服务器地址。默认值:127.0.0.1
-srs-stream,RTC流地址,一般会加上随机的后缀。默认值:/rtc/regression
-srs-timeout,每个Case的超时时间,毫秒。默认值:5000,即5秒。
-srs-publish-audio,推流时,使用的音频文件。默认值:avatar.ogg
-srs-publish-video,推流时,使用的视频文件。默认值:avatar.h264
-srs-publish-video-fps,推流时,视频文件的FPS。默认值:25
-srs-vnet-client-ip,设置pion/vnet客户端的虚拟IP,不能和服务器IP冲突。默认值:192.168.168.168

其他不常用参数:

-srs-log,是否开启详细日志。默认值:false
-srs-play-ok-packets,播放时,收到多少个包认为是测试通过,默认值:10
-srs-publish-ok-packets,推流时,发送多少个包认为时测试通过,默认值:10
-srs-https,是否连接HTTPS-API。默认值:false,即连接HTTP-API。
-srs-play-pli,播放时,PLI的间隔,毫秒。默认值:5000,即5秒。
-srs-dtls-drop-packets,DTLS丢包测试,丢了多少个包算成功,默认值:5

Note: 查看全部参数请执行./objs/srs_test -h

8.GB28181 Test

支持GB28181的压测,使用选项-sfu gb28181可以查看帮助:

make && ./objs/srs_bench -sfu gb28181 --help

运行回归测试用例
go test ./gb28181 -mod=vendor -v -count=1
也可以用make编译出重复使用的二进制:
make && ./objs/srs_gb28181_test -test.v
支持的参数如下:

-srs-sip,SIP服务器地址。默认值:tcp://127.0.0.1:5060
-srs-stream,GB的user,即流名称,一般会加上随机的后缀。默认值:3402000000
-srs-timeout,每个Case的超时时间,毫秒。默认值:11000,即11秒。
-srs-publish-audio,推流时,使用的音频文件。默认值:avatar.aac
-srs-publish-video,推流时,使用的视频文件,注意:扩展名.h264表明编码格式为AVC,.h265表明编码格式为HEVC。默认值:avatar.h264
-srs-publish-video-fps,推流时,视频文件的FPS。默认值:25

其他不常用参数:

-srs-log,是否开启详细日志。默认值:false

Note: 查看全部参数请执行./objs/srs_gb28181_test -h

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

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

相关文章

git checkout file 撤销对该文件的所有修改

git checkout file 撤销对该文件的所有修改 有时忘记修改了哪些文件,如下命令找到修改的文件 git status -s M linux-4.19.y/fs/jffs2/acl.cM linux-4.19.y/fs/jffs2/acl.hM linux-4.19.y/fs/jffs2/background.cM linux-4.19.y/fs/jffs2/build.cM linux-4.19.y/fs/jffs2/compr.…

jar包部署到服务器,修改jar包配置文件

jar包部署到服务器 打包项目1.jar包分离2.整体打包配置文件配置文件分离整体打包修改配置文件 打包项目 maven项目打包有两种&#xff0c;一是将自己的项目和依赖包分离&#xff0c;二是打包成一个jar包 1.jar包分离 需要在pom文件中引入依赖 <build><finalName&…

CS算法(一)—— 算法原理1

SAR成像专栏目录 CS —— chirp scaling,调频变标。 CS算法基于Papoulis提出的Scaling原理,通过对距离向LFM回波信号进行频率调制,实现了信号的尺度变换(变标)或平移。基于这种原理,可以通过相位相乘替代时域插值来完成随距离变化的RCMC。此外,由于是在二维频域进行数据处…

Docker基础篇之将本地镜像发布到私有库

文章目录 1. Docker Registry简介2. 将本地镜像推送到私有库 1. Docker Registry简介 Docker Registry是官方提供的工具&#xff0c;可以用于构建私有镜像仓库。 2. 将本地镜像推送到私有库 下载Docker Registry docker pull registry现在我们可以从镜像中看到下载的Regist…

【加密与解密】【01】网络安全体系

网络通信OSI模型 物理层&#xff08;Physical&#xff09;链路层&#xff08;DataLink&#xff09;网络层&#xff08;Network&#xff09;传输层&#xff08;Transport&#xff09;会话层&#xff08;Session&#xff09;表示层&#xff08;Presentation&#xff09;应用层&a…

stm32 h5 串口采用DMA循环BUFF接收数据

当使用STM32H5系列的MCU进行串口&#xff08;USART&#xff09;通信&#xff0c;并希望使用DMA&#xff08;Direct Memory Access&#xff09;进行循环缓冲区&#xff08;Circular Buffer&#xff09;接收数据时&#xff0c;你需要进行以下配置步骤&#xff1a; 初始化串口&…

【轻松搞定形象照】助你打造编程等级考试、竞赛专属二寸靓照,报名无忧,展现最佳风采!

更多资源请关注纽扣编程微信公众号 ​ 在数字化时代&#xff0c;拍照似乎变得轻而易举&#xff0c;但当我们需要一张特定规格的一寸照片时&#xff0c;事情就变得复杂起来。随着编程等级考试和各类信息学竞赛的日益临近&#xff0c;不少考生都为了一张符合要求的一寸照片而忙…

抽屉式备忘录(共25041字)

Sing Me to Sleep <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>与妖为邻的备忘录</title&g…

pytorch学习day4

一、卷积层&#xff08;Convolution Layers&#xff09; 卷积层是卷积神经网络&#xff08;CNN&#xff09;中的核心组件&#xff0c;用于提取输入数据的特征。它们通过应用卷积运算来捕捉局部的空间特征&#xff0c;非常适合处理图像和视频等具有空间结构的数据。 1. 卷积层的…

mysql索引失效的原因

MySQL索引失效的原因有很多,以下是一些常见的情况: 查询条件中使用了函数或表达式:如果在查询条件中使用了函数(如 DATE()、UPPER() 等)或表达式,MySQL 无法利用索引。例如,WHERE UPPER(name) = JOHN。 类型不匹配:查询条件的字段类型和索引字段的类型不匹配。例如,字…

创建模拟器

修改模拟器默认路径 由于模拟器文件比较大&#xff0c;默认路径在C:\Users\用户名.android\avd&#xff0c;可修改默认路径 创建修改后的路径文件 D:\A-software\Android\AVD添加系统变量ANDROID_SDK_HOME&#xff1a;D:\A-software\Android\AVD重启Android Studio 创建模拟…

【机器学习】机器学习与大模型在人工智能领域的融合应用与性能优化新探索

文章目录 引言机器学习与大模型的基本概念机器学习概述监督学习无监督学习强化学习 大模型概述GPT-3BERTResNetTransformer 机器学习与大模型的融合应用自然语言处理文本生成文本分类机器翻译 图像识别自动驾驶医学影像分析 语音识别智能助手语音转文字 大模型性能优化的新探索…

【android 9】【input】【7.发送按键事件1——InputReader线程】

系列文章目录 本人系列文章-CSDN博客 目录 系列文章目录 1.简介 1.1发送流程介绍 1.2 时序图 2.普通按键消息发送部分源码分析 2.1 设备的监听 2.2 inputreader线程阻塞等待事件发生 2.3 按键事件的产生 2.4 EventHub::getEvents 2.5 InputReader::loopOnce 2.6 process…

用增之Google

目录 简介 Google开发文档 开发提炼(纯google能力) 简介

丢失的数字 ---- 位运算

题目链接 题目: 分析: 解法一: 哈希表解法二: 高斯求和解法三:位运算 异或运算根据运算的性质, 相同的两个a异或 0 以示例一为例: 数组中有0,1,3, 缺失的数字是2, 那么只要我们将数组与0,1,2,3 异或, 就会得到2 代码: class Solution {public int missingNumber(int[] num…

【Redis】 Java操作客户端命令——集合操作与有序集合操作

文章目录 &#x1f343;前言&#x1f333;集合操作&#x1f6a9;sadd 和 smembers&#x1f6a9;srem 和 sismember&#x1f6a9;scard&#x1f6a9;sinter&#x1f6a9;sunion&#x1f6a9;sdiff &#x1f332;有序集合操作&#x1f6a9;zadd 和 zrange&#x1f6a9;zrem 和 zc…

拖拽tableView

拖拽tableView&#xff0c;随手指移动&#xff0c;插入。demo地址github

单点登录SSO的含义

目录 SSO 概念 SSO 服务 SSO 令牌 SSO 流程 SSO 实现类型 SSO 概念 SSO英文全称Single Sign On&#xff0c;单点登录&#xff0c;是一种身份验证解决方案是一种对于许多相互关连&#xff0c;但是又是各自独立的软件系统&#xff0c;提供访问控制的属性SSO是指在多个应用系…

算法 | 刷题日记

1.递归通常是用栈来实现的 递归在其本质上是通过函数调用栈&#xff08;Call Stack&#xff09;来实现的&#xff0c;而不是队列&#xff08;Queue&#xff09;。当你调用一个函数时&#xff0c;该函数的局部变量、参数和返回地址会被压入&#xff08;push&#xff09;到一个由…

python的副本拷贝

a [1, 2, 3] b a b[0] 0 print(b) # 输出结果&#xff1a;[0, 2, 3] print(a) # 输出结果&#xff1a;[0, 2, 3]这并不我想要的结果&#xff0c;我只希望拷贝一个a的副本b&#xff0c;当我改变b时不希望a变化。 究其原因&#xff0c;在 Python 中&#xff0c;将一个列表赋…