v1_EN_RaspberryPi - liufeihong/simple-rtmp-server GitHub Wiki
SRS can running on armv6(RaspberryPi) or armv7(Android). The bellow data show the performance benchmark.
Download the binary for armv6 from Github or SRS Server
The hardware of raspberrypi:
- RaspberryPi:Type 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
Software:
- 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
- Server: srs 0.9.38
- ServerType: raspberry pi
- Client:st-load
- ClientType: Virtual Machine Centos6
- Play: PC win7, flash
- Network: 100Mbps
Stream information:
- Video Bitrate: 200kbps
- Resolution: 768x320
- Audio Bitrate: 30kbps
For arm SRS: arm
Login as root, set the fd limits:
- Set limit:
ulimit -HSn 10240
- View the limit:
[root@dev6 ~]# ulimit -n
10240
- Restart SRS:
sudo /etc/init.d/srs restart
Use centos to publish to SRS:
- Start 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
* Play RTMP: `rtmp://192.168.1.105:1935/live/livestream`
* Online Play: [Online Player](http://winlinvip.github.io/simple-rtmp-server/trunk/research/players/srs_player.html?server=192.168.1.105&port=1935&app=live&stream=livestream&vhost=192.168.1.105&autostart=true)
## Client
The RTMP load test tool, read [st-load](https://github.com/winlinvip/st-load)
The st_rtmp_load used to test RTMP load, support 800-3k concurrency for each process.
* Build: `./configure && make`
* Start: `./objs/st_rtmp_load -c 800 -r <rtmp_url>`
## Record Data
Record data before test:
* The cpu for SRS:
```bash
pid=`ps aux|grep srs|grep objs|awk '{print $2}'` && top -p $pid
- The cpu for st-load:
pid=`ps aux|grep load|grep rtmp|awk '{print $2}'` && top -p $pid
- The connections:
for((;;)); do \
srs_connections=`sudo netstat -anp|grep 1935|grep ESTABLISHED|wc -l`; \
echo "srs_connections: $srs_connections"; \
sleep 5; \
done
- The bandwidth in NBps:
[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
- The table
Server | CPU | Memory | Clients | ExpectNbps | ActualNbps | st-load | Latency |
SRS | 1.0% | 3MB | 3 | - | - | - | 0.8s |
Let's start performance benchmark.
- The data for 10 clients:
./objs/st_rtmp_load -c 10 -r rtmp://192.168.1.105:1935/live/livestream >/dev/null &
Server | CPU | Memory | Clients | ExpectNbps | ActualNbps | st-load | Latency |
SRS | 17% | 1.4MB | 11 | 2.53Mbps | 2.6Mbps | 1.3% | 1.7s |
- The data for 20 clients:
Server | CPU | Memory | Clients | ExpectNbps | ActualNbps | st-load | Latency |
SRS | 23% | 2MB | 21 | 4.83Mbps | 5.5Mbps | 2.3% | 1.5s |
- The data for 30 clients:
Server | CPU | Memory | Clients | ExpectNbps | ActualNbps | st-load | Latency |
SRS | 50% | 4MB | 31 | 7.1Mbps | 8Mbps | 4% | 2s |
The summary for RaspberryPi Type B, 230kbps performance:
Server | CPU | Memory | Clients | ExpectNbps | ActualNbps | st-load | Latency |
SRS | 17% | 1.4MB | 11 | 2.53Mbps | 2.6Mbps | 1.3% | 1.7s |
SRS | 23% | 2MB | 21 | 4.83Mbps | 5.5Mbps | 2.3% | 1.5s |
SRS | 50% | 4MB | 31 | 7.1Mbps | 8Mbps | 4% | 2s |
The benchmark for RTMP SRS 0.9.72.
Server | CPU | Memory | Clients | ExpectNbps | ActualNbps | st-load | Latency |
SRS | 5% | 2MB | 2 | 1Mbps | 1.2Mbps | 0% | 1.5s |
SRS | 20% | 2MB | 12 | 6.9Mbps | 6.6Mbps | 2.8% | 2s |
SRS | 36% | 2.4MB | 22 | 12.7Mbps | 12.9Mbps | 2.3% | 2.5s |
SRS | 47% | 3.1MB | 32 | 18.5Mbps | 18.5Mbps | 5% | 2.0s |
SRS | 62% | 3.4MB | 42 | 24.3Mbps | 25.7Mbps | 9.3% | 3.4s |
SRS | 85% | 3.7MB | 52 | 30.2Mbps | 30.7Mbps | 13.6% | 3.5s |
No data.
Winlin 2014.11