-
-
Notifications
You must be signed in to change notification settings - Fork 5.4k
RaspberryPi
SRS支持arm,在树莓派上成功运行,本文记录了树莓派的性能指标。
树莓派下安装和运行SRS,有以下方式:
- 编译源站和运行:SRS在arm/raspberrypi下的编译,参考Build: RaspberryPi
- 直接下载binary文件,然后安装运行,下载RespberryPi的安装包:Github站点 或者 国内镜像站点。安装方法见页面。
查看SRS是否启动:/etc/init.d/srs status
本次测试的硬件环境如下:
- RaspberryPi:B型
- SoC BroadcomBCM2835(CPU,GPU,DSP,SDRAM,USB)
- CPU ARM1176JZF-S(ARM11) 700MHz
- GPU Broadcom VideoCore IV, OpenGL ES 2.0, 1080p 30 h.264/MPEG-4 AVC decoder
- RAM 512MByte
- USB 2 x USB2.0
- VideoOutput Composite RCA(PAL&NTSC), HDMI(rev 1.3&1.4), raw LCD Panels via DSI 14 HDMI resolution from 40x350 to 1920x1200 plus various PAL and NTSC standards
- AudioOutput 3.5mm, HDMI
- Storage SD/MMC/SDIO socket
- Network 10/100 ethernet
- Device 8xGPIO, UART, I2C, SPI bus, +3.3V, +5V, ground(nagetive)
- Power 700mA(3.5W) 5V
- Size 85.60 x 53.98 mm(3.370 x 2.125 in)
- OS Debian GNU/linux, Fedora, Arch Linux ARM, RISC OS, XBMC
另外,直播不会用到SD卡,所以可以忽略不计,用的是class2,4GB的卡。
软件环境如下:
- RaspberryPi提供的img:2014-01-07-wheezy-raspbian.img
- uname: Linux raspberrypi 3.10.25+ #622 PREEMPT Fri Jan 3 18:41:00 GMT 2014 armv6l GNU/Linux
- cpu: arm61
- 服务器: srs 0.9.38
- 服务器类型: raspberry pi
- 客户端:st-load
- 客户端类型: 虚拟机,CentOS6
- 观看客户端: PC win7, flash
- 网络: 百兆交换机(pi只支持百兆)
流信息:
- 码率:200kbps
- 分辨率:768x320
- 音频:30kbps
环境搭建参考:SRS: arm
超过1024的连接数测试需要打开linux的限制。且必须以root登录和执行。
- 设置连接数:
ulimit -HSn 10240
- 查看连接数:
[root@dev6 ~]# ulimit -n
10240
-
重启srs:
sudo /etc/init.d/srs restart
-
注意:启动服务器前必须确保连接数限制打开。
可以使用centos虚拟机推流到srs,或者用FMLE推流到raspberry-pi的SRS。假设raspberry-pi服务器的ip是192.168.1.105
,请换成你自己的服务器ip。
推送RTMP流到服务器和观看。
- 启动FFMPEG循环推流:
for((;;)); do \
./objs/ffmpeg/bin/ffmpeg \
-re -i doc/source.200kbps.768x320.flv \
-acodec copy -vcodec copy \
-f flv -y rtmp://192.168.1.105:1935/live/livestream; \
sleep 1;
done
* 查看服务器的地址:`192.168.1.105`
```bash
[root@dev6 nginx-rtmp]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 08:00:27:8A:EC:94
inet addr:192.168.1.105 Bcast:192.168.2.255 Mask:255.255.255.0
- SRS的流地址:
rtmp://192.168.1.105:1935/live/livestream
- 通过srs-players播放SRS流:播放SRS的流
使用linux工具模拟RTMP客户端访问,参考:st-load
st_rtmp_load为RTMP流负载测试工具,单个进程可以模拟1000至3000个客户端。为了避免过高负载,一个进程模拟800个客户端。
- 编译:
./configure && make
- 启动参数:
./objs/st_rtmp_load -c 800 -r <rtmp_url>
测试前,记录SRS的各项资源使用指标,用作对比。
- 查看服务器端srs消耗的CPU:
pid=`ps aux|grep srs|grep objs|awk '{print $2}'` && top -p $pid
- 查看客户端st-load消耗的CPU:
pid=`ps aux|grep load|grep rtmp|awk '{print $2}'` && top -p $pid
- 查看客户端连接数命令:
for((;;)); do \
srs_connections=`sudo netstat -anp|grep 1935|grep ESTABLISHED|wc -l`; \
echo "srs_connections: $srs_connections"; \
sleep 5; \
done
- 查看客户端消耗带宽(不影响服务器CPU),其中,单位是bytes,需要乘以8换算成网络用的bits,设置dstat为30秒钟统计一次,数据更准:
[winlin@dev6 ~]$ dstat 30
----total-cpu-usage---- -dsk/total- -net/lo- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 96 0 0 3| 0 0 |1860B 58k| 0 0 |2996 465
0 1 96 0 0 3| 0 0 |1800B 56k| 0 0 |2989 463
0 0 97 0 0 2| 0 0 |1500B 46k| 0 0 |2979 461
- 数据见下表:
Server | CPU占用率 | 内存 | 连接数 | 期望带宽 | 实际带宽 | st-load | 客户端延迟 |
SRS | 1.0% | 3MB | 3 | 不适用 | 不适用 | 不适用 | 0.8秒 |
期望带宽:譬如测试码率为200kbps时,若模拟1000个并发,应该是1000*200kbps=200Mbps带宽。
实际带宽:指服务器实际的吞吐率,服务器性能下降时(譬如性能瓶颈),可能达不到期望的带宽,会导致客户端拿不到足够的数据,也就是卡顿的现象。
客户端延迟:粗略计算即为客户端的缓冲区长度,假设服务器端的缓冲区可以忽略不计。一般RTMP直播播放器的缓冲区设置为0.8秒,由于网络原因,或者服务器性能问题,数据未能及时发送到客户端,就会造成客户端卡(缓冲区空),网络好时将队列中的数据全部给客户端(缓冲区变大)。
st-load:指模拟500客户端的st-load的平均CPU。一般模拟1000个客户端没有问题,若模拟1000个,则CPU简单除以2。
其中,“不适用”是指还未开始测试带宽,所以未记录数据。
本章测试SRS使用Select机制的性能。
开始启动st-load模拟客户端并发测试SRS的性能。
树莓派一般10个以内的连接比较常用,所以我们先测试10个链接的情况。加上推流链接实际上11个。
- 启动10客户端:
./objs/st_rtmp_load -c 10 -r rtmp://192.168.1.105:1935/live/livestream >/dev/null &
- 客户端开始播放30秒以上,并记录数据:
Server | CPU占用率 | 内存 | 连接数 | 期望带宽 | 实际带宽 | st-load | 客户端延迟 |
SRS | 20.0% | 1.4MB | 11 | 2.53Mbps | 2.65Mbps | 1.3% | 1.5秒 |
- 再启动一个模拟10个连接的st-load,共20个连接。
- 客户端开始播放30秒以上,并记录数据:
Server | CPU占用率 | 内存 | 连接数 | 期望带宽 | 实际带宽 | st-load | 客户端延迟 |
SRS | 40% | 1.78MB | 21 | 4.83Mbps | 5.26Mbps | 2% | 1.9秒 |
- 再启动一个模拟10个连接的st-load,共30个连接。
- 客户端开始播放30秒以上,并记录数据:
Server | CPU占用率 | 内存 | 连接数 | 期望带宽 | 实际带宽 | st-load | 客户端延迟 |
SRS | 60% | 1.99MB | 31 | 7.1Mbps | 8.4Mbps | 4.3% | 3.2秒 |
- 再启动一个模拟10个连接的st-load,共40个连接。
- 客户端开始播放30秒以上,并记录数据:
Server | CPU占用率 | 内存 | 连接数 | 期望带宽 | 实际带宽 | st-load | 客户端延迟 |
SRS | 63.5% | 2.13MB | 41 | 9.43Mbps | 11.3Mbps | 5% | 2.6秒 |
- 再启动一个模拟10个连接的st-load,共50个连接。
- 客户端开始播放30秒以上,并记录数据:
Server | CPU占用率 | 内存 | 连接数 | 期望带宽 | 实际带宽 | st-load | 客户端延迟 |
SRS | 80% | 2.8MB | 51 | 11.7Mbps | 13.7Mbps | 6% | 4.6秒 |
- 再启动一个模拟10个连接的st-load,共60个连接。
- 客户端开始播放30秒以上,并记录数据:
Server | CPU占用率 | 内存 | 连接数 | 期望带宽 | 实际带宽 | st-load | 客户端延迟 |
SRS | 97% | 3.68MB | 61 | 14Mbps | 16Mbps | 7.7% | 5.8秒 |
SRS使用select模型时,RaspberryPi B型,230Kbps视频性能测试如下表:
Server | CPU占用率 | 内存 | 连接数 | 期望带宽 | 实际带宽 | st-load | 客户端延迟 |
SRS | 20.0% | 1.4MB | 11 | 2.53Mbps | 2.65Mbps | 1.3% | 1.5秒 |
SRS | 40% | 1.78MB | 21 | 4.83Mbps | 5.26Mbps | 2% | 1.9秒 |
SRS | 60% | 1.99MB | 31 | 7.1Mbps | 8.4Mbps | 4.3% | 3.2秒 |
SRS | 63.5% | 2.13MB | 41 | 9.43Mbps | 11.3Mbps | 5% | 2.6秒 |
SRS | 80% | 2.8MB | 51 | 11.7Mbps | 13.7Mbps | 6% | 4.6秒 |
SRS | 97% | 3.68MB | 61 | 14Mbps | 16Mbps | 7.7% | 5.8秒 |
可见,RaspberryPi B型,SD卡class2,能支持的并发,SRS使用select时,码率为230kbps时,大约为50个,网络带宽占用13Mbps。
本章测试SRS使用Epoll机制的性能。
开始启动st-load模拟客户端并发测试SRS的性能。
树莓派一般10个以内的连接比较常用,所以我们先测试10个链接的情况。加上推流链接实际上11个。
- 启动10客户端:
./objs/st_rtmp_load -c 10 -r rtmp://192.168.1.105:1935/live/livestream >/dev/null &
- 客户端开始播放30秒以上,并记录数据:
Server | CPU占用率 | 内存 | 连接数 | 期望带宽 | 实际带宽 | st-load | 客户端延迟 |
SRS | 17% | 1.4MB | 11 | 2.53Mbps | 2.6Mbps | 1.3% | 1.7秒 |
- 再启动一个模拟10个连接的st-load,共20个连接。
- 客户端开始播放30秒以上,并记录数据:
Server | CPU占用率 | 内存 | 连接数 | 期望带宽 | 实际带宽 | st-load | 客户端延迟 |
SRS | 23% | 2MB | 21 | 4.83Mbps | 5.5Mbps | 2.3% | 1.5秒 |
- 再启动一个模拟10个连接的st-load,共30个连接。
- 客户端开始播放30秒以上,并记录数据:
Server | CPU占用率 | 内存 | 连接数 | 期望带宽 | 实际带宽 | st-load | 客户端延迟 |
SRS | % | MB | 31 | 7.1Mbps | Mbps | % | 秒 |
Winlin 2014.3
Welcome to SRS wiki!
Please select your language:
Please select your language:
Please select your language:
Please select your language:
Please select your language: