1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-13 03:41:55 +00:00
srs/trunk/3rdparty/srs-bench
winlin 7750bdae10 GB28181: Enable regression test for gb28181. v5.0.122
1. Build regression test tool for gb28181.
2. Run regression test for gb28181.
3. Format go code and eliminate logs.
4. Change base docker to ubuntu20.
2022-12-31 19:36:49 +08:00
..
auto SquashSRS4: Add demo for RTC 2021-05-05 13:26:25 +08:00
gb28181 GB28181: Enable regression test for gb28181. v5.0.122 2022-12-31 19:36:49 +08:00
janus GB28181: Support GB28181-2016 protocol. v5.0.74 (#3201) 2022-10-06 17:40:58 +08:00
srs FLV: Support set default has_av and disable guessing. v5.0.110 (#3311) 2022-12-17 14:51:48 +08:00
vendor GB28181: Enable regression test for gb28181. v5.0.122 2022-12-31 19:36:49 +08:00
vnet SquashSRS4: Add demo for RTC 2021-05-05 13:26:25 +08:00
.gitignore GB28181: Enable regression test for gb28181. v5.0.122 2022-12-31 19:36:49 +08:00
avatar.aac GB28181: Support GB28181-2016 protocol. v5.0.74 (#3201) 2022-10-06 17:40:58 +08:00
avatar.flv Squash: Merge SRS 4.0, regression test for RTMP. 2021-10-12 08:36:24 +08:00
avatar.h264 SquashSRS4: Regine DTLS and add regression tests. 4.0.84 2021-03-10 08:29:40 +08:00
avatar.ogg For regression test, add srs-bench to 3rdparty 2021-03-04 14:18:57 +08:00
bbb.flv Squash: Merge SRS 4.0, regression test for RTMP. 2021-10-12 08:36:24 +08:00
go.mod GB28181: Support GB28181-2016 protocol. v5.0.74 (#3201) 2022-10-06 17:40:58 +08:00
go.sum GB28181: Support GB28181-2016 protocol. v5.0.74 (#3201) 2022-10-06 17:40:58 +08:00
LICENSE SquashSRS4: Update srs-bench. 2021-03-24 11:05:25 +08:00
main.go GB28181: Support GB28181-2016 protocol. v5.0.74 (#3201) 2022-10-06 17:40:58 +08:00
Makefile GB28181: Enable regression test for gb28181. v5.0.122 2022-12-31 19:36:49 +08:00
README.md GB28181: Enable regression test for gb28181. v5.0.122 2022-12-31 19:36:49 +08:00

srs-bench

WebRTC benchmark on pion/webrtc for SRS.

Usage

编译和使用:

git clone -b feature/rtc https://github.com/ossrs/srs-bench.git && 
cd srs-bench && make && ./objs/srs_bench -h

编译和启动SRS:

git clone https://github.com/ossrs/srs.git &&
cd srs/trunk && ./configure && make &&
./objs/srs -c conf/console.conf

请按下面的操作启动测试。

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

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

Multipel Player or Publisher for RTC

会议场景的播放压测会多个客户端播放多个流比如3人会议那么就有3个推流每个流有2个播放。

首先启动推流压测比如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

DVR

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

首先推流到SRS参考live

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.oggv.h264可以用做推流。

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?encrypt=false -nn 100

Note: 可以传递更多参数详细参考SRS支持的参数。

Regression Test

回归测试需要先启动SRS支持WebRTC推拉流

./objs/srs -c conf/rtc.conf

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

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

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

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

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

make && ./objs/srs_test -test.v -srs-log -test.run TestRtcBasic_PublishPlay

支持的参数如下:

  • -srs-serverRTC服务器地址。默认值127.0.0.1
  • -srs-streamRTC流地址一般会加上随机的后缀。默认值/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-packetsDTLS丢包测试丢了多少个包算成功默认值5

GCOVR

本机生成覆盖率时,我们使用工具gcovr

在macOS上安装gcovr

pip3 install gcovr

在CentOS上安装gcovr

yum install -y python2-pip &&
pip install lxml && pip install gcovr

Janus

支持Janus的压测使用选项-sfu janus可以查看帮助:

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

首先需要启动Janus推荐使用janus-docker:

ip=$(ifconfig en0 inet|grep inet|awk '{print $2}') &&
sed -i '' "s/nat_1_1_mapping.*/nat_1_1_mapping=\"$ip\"/g" janus.jcfg &&
docker run --rm -it -p 8080:8080 -p 8443:8443 -p 20000-20010:20000-20010/udp \
    -v $(pwd)/janus.jcfg:/usr/local/etc/janus/janus.jcfg \
    -v $(pwd)/janus.plugin.videoroom.jcfg:/usr/local/etc/janus/janus.plugin.videoroom.jcfg \
    registry.cn-hangzhou.aliyuncs.com/ossrs/janus:v1.0.7

若启动成功,打开页面,可以自动入会:http://localhost:8080

模拟5个推流入会可以在页面看到入会的流

make -j10 && ./objs/srs_bench -sfu janus \
  -pr webrtc://localhost:8080/2345/livestream \
  -sa avatar.ogg -sv avatar.h264 -fps 25 -sn 5

模拟5个拉流入会只拉流不推流

make -j10 && ./objs/srs_bench -sfu janus \
  -sr webrtc://localhost:8080/2345/livestream \
  -nn 5

GB28181

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

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

运行回归测试用例,更多命令请参考Regression Test

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

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

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

支持的参数如下:

  • -srs-sipSIP服务器地址。默认值tcp://127.0.0.1:5060
  • -srs-streamGB的user即流名称一般会加上随机的后缀。默认值3402000000
  • -srs-timeout每个Case的超时时间毫秒。默认值11000即11秒。
  • -srs-publish-audio,推流时,使用的音频文件。默认值:avatar.aac
  • -srs-publish-video,推流时,使用的视频文件。默认值:avatar.h264
  • -srs-publish-video-fps推流时视频文件的FPS。默认值25

其他不常用参数:

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

2021.01, Winlin