Skip to content

RaspberryPi

winlin edited this page Mar 30, 2014 · 27 revisions

树莓派下的SRS

SRS支持arm,在树莓派上成功运行,本文记录了树莓派的性能指标。

准备服务器

树莓派下安装和运行SRS,有以下方式:

查看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

OS设置

超过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

本章测试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性能总结

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

本章测试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!

SRS 5.0 wiki

Please select your language:

SRS 4.0 wiki

Please select your language:

SRS 3.0 wiki

Please select your language:

SRS 2.0 wiki

Please select your language:

SRS 1.0 wiki

Please select your language:

Clone this wiki locally