视频网站基于srs的直播业务压力测试

这段时间一直在进行基于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的性能指标变化曲线。

你可能感兴趣的:(性能测试)