本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!