一、直播系统架构介绍
1. 直播产品的种类:
- 泛娱乐直播
例如:花椒、映客等娱乐直播,斗鱼、熊猫等游戏直播 - 实时互动直播
例如:音视频会议、教育直播等,像Zoom、声网
二、搭建流媒体服务
- 准备流媒体服务器(Linux或Mac)
- 编译并安装Nginx服务
- 配置RTMP服务并启动Nginx服务
三、Nginx源码下载
- 下载nginx源码
http://nginx.org/en/download.html - 下载nginx-rtmp-module
https://github.com/arut/nginx-rtmp-module.git
四、rtmp环境搭建
- 编译安装nginx
./configure --add-module=/path/to/nginx-rtmp-module --prefix=/usr/local/nginx --with-openssl=../openssl
- 配置nginx
#进入nginx/conf,打开nginx.conf文件在配置中添加以下配置项:#rtmp 服务
rtmp {server{#指定服务端口listen 1935;chunk_size 4000;#指定流应用application live{live on;allow play all;}}
}
- 启动服务
./sbin/nginx -c conf/nginx.conf
五、SRS介绍
SRS(Simple Rtmp Server),它是单进程实现的。在同一台服务器上可以启动多个进程同时提供服务。它的定位是运营级的互联网直播服务器集群;它提供了非常丰富的接入方案,支持RTMP、HLS、HTTP-FLV等。
服务器接入方式比较:
Feature | SRS | NGINX | CRTMPD | FMS | WOWZA |
---|---|---|---|---|---|
RTMP | Stable | Stable | Stable | Stable | Stable |
HLS | Stable | Stable | x | Stable | Stable |
HDS | Experiment | x | x | Stable | Stable |
HTTP FLV | Stable | x | x | x | x |
HLS(aonly) | Stable | x | x | Stable | Stable |
HTTP Server | Stable | Stable | x | x | Stable |
服务器性能比较:
Feature | SRS | NGINX | CRTMPD | FMS | WOWZA |
---|---|---|---|---|---|
Concurrency | 7.5k | 3k | 2k | 2k | 3k |
MultipleProcess | Experiment | Stable | x | x | x |
RTMP Latency | 0.1s | 3s | 3s | 3s | 3s |
HLS Latency | 10s | 30s | x | 30s | 30s |
srs代码库:git clone https://github.com/ossrs/srs.git
编译:
cd srs/trunk./configure --prefix=/usr/local/srs
make
启动服务器:
./objs/srs -c conf/srs.conf
检查SRS是否成功启动,执行命令:
# 查看SRS的状态
./etc/init.d/srs status# 或者看SRS的日志
tail -n 30 -f ./objs/srs.log
下面的命令显示SRS正在运行:
MB0:trunk $ ./etc/init.d/srs status
SRS(pid 90408) is running. [ OK ]MB0:trunk $ tail -n 30 -f ./objs/srs.log
[2021-08-13 10:30:36.634][Trace][90408][12c97232] Hybrid cpu=0.00%,0MB, cid=1,1, timer=61,0,0, clock=0,22,25,0,0,0,0,1,0
使用FFmpeg推流,localhost为你的IP地址:
ffmpeg -i source.mp4 -c:v libx264 -ar 22050 -crf 28 destinationfile.flvffmpeg -re -i ./doc/source.flv -c copy -f flv rtmp://localhost/live/livestream
FLV文件分析工具:https://github.com/zymill/flvAnalyser