St-load
1.支持RTMP推流测试,一个进程支持500个并发。执行程序:./objs/sb_rtmp_publish
2.支持RTMP拉流测试,一个进程支持5k并发。执行程序:./objs/sb_rtmp_load
3.支持HTTP负载测试,所有并发重复下载一个HTTP文件。执行程序:./objs/sb_http_load
4.支持HLS解析和测试,下载ts片后等待一个切片长度,模拟客户端。支持HLS点播和直播。执行程序:./objs/sb_hls_load
安装篇
1.在linux环境下载St-load源码包
[root@test /]# git clone https://github.com/rzrobert/st-load-master.git
2.对源码进行编译
[root@test /]#cd st-load-master/
[root@test /st-load-master]#./configure 用来检测你的安装平台的目标的特征
[root@test /st-load-master]#make 编译
编译完成后在objs目录下生成可执行文件
[root@test /st-load-master]#cd ./objs
[root@test /st-load-master/objs]#ls
1.推流前准备工作,编辑nginx.conf的RTMP层
2.模拟单路RTMP推流
./sb_rtmp_publish -i /usr/local/ffmpeg/cnlzd.flv -c 1 -r rtmp://127.0.0.1/live/livestream
3.模拟多路RTMP推流
./sb_rtmp_publish -i /usr/local/ffmpeg/cnlzd.flv -c 10 -r rtmp://127.0.0.1/live/livestream_{i}
常用参数说明:
-i 设定输入流
-c 负载个数,默认:1
-r 后面接每个测试的url地址,等同于 --url URL
-s 线程启动时间 defaut:5.00 0表示没有延迟
注意:sb_rtmp_publish只可以推送.flv格式的视频
拉流篇
1.RTMP
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。
拉流:
./sb_rtmp_load -c 1 -r rtmp://127.0.0.1:1935/live/livestream
2.HTTP
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。在最新一代的超文本标识语言HTML5中,视频文件的点播,同样也采用了HTTP作为其承载协议。
拉流:
./sb_http_load -c 1 -r http://127.0.0.1:8081/live/livestream
3.HLS
HLS (HTTP Live Streaming),Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件和TS媒体分片文件。
分段策略:
HLS的分段策略,基本上推荐是10秒一个分片,当然,具体时间还要根据切片的实际时长做标注。通常来说,为了缓存等方面的原因,在索引文件中会保留最新的三个分片地址,以类似“滑动窗口”的形式,进行更新。
m3u8文件:
m3u8是HTTP Live Streaming直播的索引文件。m3u8基本上可以认为就是.m3u格式文件,区别在于,m3u8文件使用UTF-8字符编码。
#EXTM3U m3u文件头,必须放在第一行
#EXT-X-MEDIA-SEQUENCE:7 第一个TS分片的序列号
#EXT-X-TARGETDURATION:15 每个分片TS最大时长
#EXTINF:15.099 extra info分片TS的信息
HLS拉流:
./sb_hls_load -c 1 -r http://127.0.0.1:8081/hls/livestream/index.m3u8
项目上用到了rtmp,在原来的基础上改吧改吧
调试完了之后,能跑,想测试一下性能
使用固定端口的socket接收推流,网页端播放
找了找,说st-load的比较多, 最开始想自己编个win版
试了试,不行,因为有个依赖库,state threads, 这个库不支持win
改动起来比较麻烦,就算了
linux下,编译相当容易,congifure,make之后就好了,缺啥装啥就好了
运行, 一般使用下面的命令
./sb_rtmp_load -c 100 -r http://xxx/index.m3u8 -m 5
-c 表示连接数
-r 连接地址 ,默认需要写固定地址,我是根据推流代码,自己改造了下,可以每个任务
拉一个流
-m 报告时间,单位s, 默认好像是30s一次吧,太慢了
threads,线程数量
alive, 活跃线程数量吧,这个始终跟threads的值一致,不太确定到底什么含义
duration,时间,从开始到现在的时间
nread, 接收的速度,默认的是按M来显示的,但是我这边rtmp播的都是cif大小的,每个占用带宽很小,看的不方便
所以在os目录下的htl_os_st.cpp中,对StStatistic::DoReport改造了下,换算成kB/s了
nwrite,写速度
tasks,任务数,etasks,错误的任务数,
stasks,子任务数,estasks,子任务错误任务数
对我来说,比较有用的就是nread和etasks了,其他的不太关心
推流没有用st-load这个,主要是推流的数据格式要按照1077协议,与rtp有些不一致,不能直接推流,所以用的是自己写的模拟推流工具