本教程使用centos7.6.1810版本搭建
SRS(simple-rtmp-server)是一个一个性能良好,安装简单,搭建集群简单的,多样化的直播服务器,类似的还有red5,crtmp,nginx-rtmp-module等,告诉大家这个服务是中国人开发的哦,有点小骄傲
red5和crtmp,srs,区别
red5安装简单,性能一般,集群配置无文档,用户量大的话,就不要用了。
crtmp安装简单,性能良好,集群配置简单,但是配置集群时需要指定从服务器的rtmp的流地址,做点播还是比较合适的,做直播不是很合适了。
srs安装简单,性能良好,集群配置简单,多样化,可惜没有连接池,所以要自己做了个请求的统一入口。
好的,现在开始我们的安装教程,安装过程碰到的问题,我都会提及,并提供解决方案
- 下载
官网地址: http://www.ossrs.net/srs.release/releases/
进入使用说明
https://github.com/ossrs/srs#usage
如下找到搭建步骤,基本视频流服务器教程在这里都有(可以选择谷歌翻译),我们选择第一个,搭建RTMP流服务器
下面开始安装步骤
下载源码(太慢了,推荐使用下面的链接)
git clone https://github.com/ossrs/srs
推荐使用国内镜像
git clone https://git.oschina.net/winlinvip/srs.oschina.git
进入trunk目录 更新最新代码
git pull
编译SRS2
进入srs主目录
执行组合命令
./configure –prefix=/usr/local/srs2&&make&&make install
--prefix为安装目录,可使用./configure –help查看命令帮助
编译完成修改配置文件
进入主目录的conf文件夹
cd ./conf
vi rtmp.conf
插入如下代码
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
}
如果配置低延迟,请使用如下代码
listen 1935;
max_connections 1000;
srs_log_tank file;
srs_log_file ./objs/srs.log;
http_api {
enabled on;
listen 1985;
}
http_server {
enabled on;
listen 80;
dir ./objs/nginx/html;
}
stats {
network 0;
disk sda sdb xvda xvdb;
}
vhost __defaultVhost__ {
#最小延迟打开,默认是打开的,该选项打开的时候,mr默认关闭。
min_latency on;
#Merged-Read,针对RTMP协议,为了提高性能,SRS对于上行的read使用merged-read,即SRS在读写时一次读取N毫秒的数据
mr {
enabled off;
#默认350ms,范围[300-2000]
#latency 350;
}
#Merged-Write,SRS永远使用Merged-Write,即一次发送N毫秒的包给客户端。这个算法可以将RTMP下行的效率提升5倍左右,范围[350-1800]
mw_latency 100;
#enabled on;
#https://github.com/simple-rtmp-server/srs/wiki/v2_CN_LowLatency#gop-cache
gop_cache off;
#配置直播队列的长度,服务器会将数据放在直播队列中,如果超过这个长度就清空到最后一个I帧
#https://github.com/simple-rtmp-server/srs/wiki/v2_CN_LowLatency#%E7%B4%AF%E7%A7%AF%E5%BB%B6%E8%BF%9F
queue_length 10;
#http_flv配置
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
hstrs on;
}
}
详情请参考官方https://github.com/ossrs/srs/wiki/v1_CN_LowLatency
然后我们启动srs2,默认是使用conf文件夹下的srs.conf配置文件启动,我们使用了指定的配置文件rtmp.conf启动,搭建rtmp流服务器,执行以下命令
/objs/srs -c ./conf/rtmp.conf
这时候我们还不能使用外部推流命令,外部也不能根据rtmp协议拉流,因为centos默认打开防火墙,我们需要关闭防火墙,或者开放端口和通道
具体可以参考以下博文
https://blog.csdn.net/u011846257/article/details/54707864
指定区域开放端口,这里指定了1935端口,所以开放1935端口
firewall-cmd --zone=public --add-port=1935/tcp(永久生效再加上 --permanent)
重启防火墙
firewall-cmd --reload
如果外部无法推流到SRS2,或者外部也无法拉取RTMP流,可以尝试关闭防火墙操作
启动后可以后台查看进程
ps -ef|grep srs
如果后台没有相关进程,请执行以下命令,并重新编译安装
rm -rf /usr/local/srs2
如果还没有进程,那重启一下,在执行启动
启动后,就可以使用ffmpeg执行推流命令了
ffmpeg \
-rtsp_transport tcp \
-threads 1 \
-buffer_size 1024000 \
-max_delay 500000 \
-i rtsp://admin:tianma315@192.168.3.21:554/h264/ch0/main/av_stream \
-c:v libx264 -b:v 350k -profile:v baseline -level 3.0 \
-fflags nobuffer \
-preset ultrafast \
-tune zerolatency \
-r 15 \
-vcodec h264 \
-f flv -an rtmp://192.168.153.128:1935/live/192168321
注: 192.168.153.128请根据自身服务器地址切换
集群搭建请参考以下博文