参考链接:https://www.cnblogs.com/lidabo/p/6404513.html
在Ubuntu 18.04上搭建一个RTMP服务器实现视频流的转播,可以用以实现远程的监控,通过nginx可以实现视频服务的搭建
首先安装需要的库
$ sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev
下载nginx软件源代码
$ wget http://nginx.org/download/nginx-1.15.0.tar.gz
版本为1.15.0,可以根据时间选择最新的版本
下载nginx-rtmp-module
$ wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
解压文件,进入nginx目录
$ tar -zxvf nginx-1.15.0.tar.gz
$ unzip master.zip
$ cd nginx-1.15.0
进行编译和安装
$./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
$ make
$ sudo make install
安装完成之后,可以运行
$ sudo /usr/local/nginx/sbin/nginx
启动nginx服务,需要配置conf文件以启动RMTP服务,如下
rtmp {
server {
listen 1935; #端口号,默认1935
chunk_size 4096;
application live { #应用名
live on;
record off; #关闭视频记录
}
}
}
在/usr/local/nginx/conf/nginx.conf文件的最后附上上述的配置
之后重启nginx服务,就可以启用RTMP服务了
$ sudo /usr/local/nginx/sbin/nginx -s stop
$ sudo /usr/local/nginx/sbin/nginx
通过上述配置生效的服务的推送和拉流地址为 rtmp://hostname/live/xxx,其中xxx为推流时指定的名称,比如
rtmp://192.168.0.100/live/test
RTMP服务的主机地址为192.168.0.100(测试主机),播放地址/live,特定的视频流名称/test
通过在另外的机器上推流和播放视频流来测试RTMP服务,在推送服务器上通过ffmpeg进行推流
$ ffmpeg -i /dev/video0 -f flv rtmp://192.168.0.100/live/test
如上为最简单的推流指令,-i表示输入的摄像头,-f 为格式,一般为flv,rtmp://...为推送地址,其中192.168.0.100为服务器,这里为局域网的测试服务器,/live为推送的应用,如前面的推送服务的设置,/test为自定义的视频流名称
正常情况下会出现类似上述的信息,表示推送成功。
在客户端可以通过VLC等播放器打开网络视频流,获取视频。播放地址同样为
rtmp://192.168.0.100/live/test
播放器能够正常进行播放,验证RTMP服务以及推拉流功能成功运行。
默认的推送服务分辨率可能不是很高,可以采用高分辨率的视频推送指令,如下
$ ffmpeg -i /dev/video0 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://192.168.0.100/live/test
具体原理待专业人士进一步分析
在服务器中设置视频录制,视频流可以自动保存下来。通过更改nginx服务的配置实现视频流的自动保存,如下
rtmp {
server {
listen 1935;
chunk_size 4096;
max_connections 10;
application live {
live on;
record all;
record_unique on; #record file named with timestamp, not overwriten
record_path /home/ubuntu/rtmp/record; #record path
record_suffix -%Y-%m-%d-%H_%M_%S.flv; #suffix of record file name
record_max_size 250M; #maximum size of record file
}
}
}
RTMP服务会自动保存视频流,如上每到250M则产生一个新的文件进行保存,保存格式为FLV格式