SRS压测--SRS-Bench

2024-06-04 05:44
文章标签 压测 srs bench

本文主要是介绍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

这篇关于SRS压测--SRS-Bench的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029217

相关文章

CRtmpServer转推流到Nginx Rtmp及SRS(SimpleRtmpServer)的经历

转自:http://blog.csdn.net/fengyily/article/details/42557841 本人一直用的是CRtmpServer服务,在CRtmpServer服务中根据自已的想法也加入了许多功能,如通过http接口来加载配置等,苦于不支持HLS,自已添加ts分片水平又有限,思来想去决定借助SimpleRtmpServer的HLS功能。说干就干,马上查找相关资源

性能测试工具 wrk,ab,locust,Jmeter 压测结果比较

前言 在开发服务端软件时,经常需要进行性能测试,一般我采用手写性能测试代码的方式进行测试,那有什么现成的好的性能测试工具吗? 性能测试工具 wrk,ab,locust,Jmeter 压测结果比较 详见: 性能测试工具 wrk,ab,locust,Jmeter 压测结果比较 Jmeter性能测试 入门

深入浅出SRS—RTMP实现

RTMP 直播是 SRS 最典型的使用场景,客户端使用 RTMP 协议向 SRS 推流,使用 RTMP 协议从 SRS 拉流,SRS 作为一个 RTMP 直播服务器实现媒体的转发。同时,RTMP 是 SRS 的中转协议,其他协议之间的互通需要先转为 RTMP,因此,理解 SRS RTMP 直播实现是理解其他协议实现的重要前提。本文主要分析 SRS RTMP 直播功能的实现原理,相关概念和配置请参考

srs推拉流客户端实现

srs推拉流客户端实现 一、实现功能 推流webrtc到srs播srs的webrtc流 二、webrtc编译 编译参数增加 proprietary_codecs=true编译必须使用clang编译,配置文件有如下 rtc_use_h264 =proprietary_codecs && !is_android && !is_ios && !(is_win &&!is_clang) 三、

解决SRS流媒体服务服务器无法接收客户端ipv6 RTMP推流的思路

这篇短文我不介绍SRS是什么,主要介绍一个场景问题,场景是你使用服务器并且部署了SRS服务配置成一个媒体流转发服务,也就是客户端往SRS流媒体服务器推流,然后SRS把流转推出去,但是会涉及到一个问题是:用户客户端网络可能是ipv4也可能是ipv6,得确保不管是哪种网络都要能接收客户端的RTMP推流。   确保这个场景没问题要做两件事:   1、确保推流域名是支持ipv6的,这个可以通过检测推流

安装jmeter的梯度压测线程组(Custom Thread Groups)的插件

1、打开:Install :: JMeter-Plugins.org 2、进入主页后点击下面图片的链接进行安装 3、将安装包放入apache-jmeter-5.4.1    >   lib       >    ext  里面 4、打开Jmeter 点击下面的【Plugins Manager】 5、进入 【Plugins Manager】后选择【Avaliable Plug

压测工具大比武!谁是市场主流?

阿里云PTS 性能测试PTS(Performance Testing Service)是阿里云一款商业化的性能测试工具。支持按需发起压测任务,可支持百万并发、千万TPS流量发起能力,100%兼容JMeter。PTS支持的场景编排、API调试、流量定制、流量录制等功能,可快速创建业务压测脚本,精准模拟不同量级用户访问业务系统,帮助业务快速提升系统性能和稳定性。 阿里云PTS具备如下特性:

更轻量级的性能测试工具—Apache Bench

之前一直使用的Jmeter进行接口性能测试,但是AB工具是很轻量级、快速开箱即用的。 yum安装 yum install -y httpd-tools 安装完成后,通过  ab -V  命令验证安装情况,如下表示安装成功 通过如下命令可以查看如何使用AB工具: 模拟请求示例: 现在模拟10000个请求,50个并发对某个网站进行压力测试(别整太多了容易被限流)   S

【ceph学习】rados bench性能测试工具介绍

rados bench性能测试工具介绍 radosbench介绍 Ceph 包含 rados bench 命令,用于在 RADOS 存储群集上执行性能基准测试。命令将执行写入测试,以及两种类型的读测试。在测试读取和写入性能时,–no-cleanup 选项非常重要。默认情况下,rados bench 命令会删除它写入存储池的对象。保留这些对象后,可以使用两个读取测试来测量顺序读取和随机读取的性能