flazr针对rtmp进行批量直播测试

来源:互联网 发布:水木年华知乎 编辑:程序博客网 时间:2024/05/22 02:08

前两天想用python写个脚本,批量访问rtmp服务器,达到并发直播的效果,在网络上搜了下,有个python-librtmp的库可以用,但是这个库死活装不上来,不想浪费太多时间,然后放弃了(后面再研究)。

随后用度娘细搜了下,发现了flazr这个工具,支持rtmp并发直播的功能,完全可以用来进行并发直播的压力测试,立马下载并投入使用。

这个工具支持在win和linux下使用,分别执行.bat和.sh脚本就行了,如下:

client.sh rtmp://ip:port/path -load 200     ----->表示200个并发请求

这个工具是用java开发的,使用之前需要设置一下jvm,否则容易出现java head 的错误。

直接打开.sh脚本,根据自身情况设置jvm的MEM,如下:

-----------------------------

这段时间一直在进行基于srs的视频直播业务的压力测试,目前在进行的是并发推流的测试场景。 
视频直播服务器采用的是rtmp(Real Time Messaging Protocol)协议,推流的目标地址也是类似于“rtmp://0.0.0.1/path”,就测试情况来看,没有比较合适的进行压力测试工具。最终决定使用python来开发能够执行并发推流的脚本。最初的时候,在网上找到一个支持rtmp协议的python第三方模块rtmpy,不过该模块一直未能安装成功。后来在同事处了解到了ffmpeg(一套多媒体编解码框架),这是一个非常强大的编解码工具,有众多的参数可用,刚好满足我进行推流和直播的测试需求。 
在进一步熟悉了一下ffmpeg后,就开始考虑将ffmpeg与python结合使用,在linux环境下,可以使用python中的os.popen() 方法来执行ffmpeg命令,那么对于推流场景就可以实现如下方法: 
def fun(): 
os.popen(“ffmpeg -re -i xxx.mp4 -c copy -f flv rtmp://0.0.0.0:1935/path 2>/dev/null”) 
当然,上面只是一个简单的使用ffmpeg来执行视频流推送的实现方法,要达到并发推送的目的,那么就必须使用多进程并发,在这里最好的方式是使用python的进程池来实现,就是使用multiprocessing模块的Pool,如: 
poo = multilprocessing.Pool(process = 5) 
for x in rtmpAddrList: 
pool.apply_async(fun,(x,))#”x“就是传入方法fun中的参数,可以将fun中的ffmpeg命令参数化,这样就可以实现对不同的rtmp地址执行推流操作 
pool.close() 
pool.join()

对视频直播服务器的压力测试有三个比较重要的场景,并发直播、并发推流、并发直播+并发推流,这三个场景都可以使用上面的方式实现压力测试,当然不能在一台测试机器运行太多并发进程,最好是准备多台测试机器,将并发进程平均分配到每台测试机器,然后让各测试机器间隔一定的时间启动脚本,这样的话不但可以实现压力测试,还可以测试视频直播服务器在并发数逐渐增长的情况下cpu、memory、io的性能指标变化曲线。

转自:http://blog.csdn.net/u011881908/article/details/45147535
0 0
原创粉丝点击