srs-bench 相信做过直播流并发测试的并不陌生,不在这过多介绍,见 srs-bench 官网: https://github.com/ossrs/srs-bench
特定业务说明:
项目在对推流服务端做了限制,推流成功不是简单将 流推到服务端,推流是,需要调用添加流(add steam )API添加一条流信息,添加成功后会返回值中有token值。简单说下,就是推流时,需要带认证的token。
srs-bench中 sb_rtmp_publish 的局限性在于,在推流时,没有token处理这些功能,比如:
./sb_rtmp_publish -i doc/source.200kbps.768x320.flv -c 1000 -r rtmp://127.0.0.1:1935/live/livestream_{i}
这里意思是将1000路流推到 服务端,流的名称为livestream_{i}。
那么问题来了,根据上述业务需要,推流到服务端需要认证的token,所以这样的话,sb_rtmp_publish本省的这种机制就不能满足要求。我们就需要一个替代方案。
解决方案:
(1)利用Linux多进程机制,让sb_rtmp_publish以多进程运行。每个进程跑一路推流。
./sb_rtmp_publish -i ../doc/source.200kbps.768x320.flv -c 1 -r rtmp://192.168.1.26:1935/live/PFM_test_HD_test${i}?token=${line}
(2)sb_rtmp_publish是在前端运行,需要改为 在后端运行,用nohup
nohup ./sb_rtmp_publish -i ../doc/source.200kbps.768x320.flv -c 1 -r rtmp://192.168.1.26:1935/live/PFM_test_HD_test${i}?token=${line} >pfm_logs/logpfm 2>&1 &
(3)Token存在一个文件中,写个shell命令从token文件去读取,有多少token就会产生多少路推流。
完成shell 命令如下:
#!/bin/sh i=0(4)至于token怎么来,需要根据具体的业务,写代码代调用API生成,并把这些token写到一个文件中。
cat data|while read line
do
let i=${i}+1
#echo ${line}${i}
nohup ./sb_rtmp_publish -i ../doc//source.200kbps.768x320.flv -c 1 -r rtmp://192.168.1.26:1935/live/PFM_test_HD_test${i}?token=${line} >pfm_logs/logpfm 2>&1 &
#sleep 10s
done
至此方案结束。