公司视频部门的需求,要一个接收推流的服务器,据他们说之前用red5,好多需求不能实现,不知真假。既然需求到我这里了,就搜索研究了一下,发现nginx有rmtp模块,大概看了看,写个文档记录一下。
1. 用nginx官方srpm,重新编译nginx,加入nginx-rtmp-module,不用多说。
]# wget
http://nginx.org/packages/centos/7/SRPMS/nginx-1.10.2-1.el7.ngx.src.rpm
]# rpm -ivh nginx-1.10.2-1.el7.ngx.src.rpm
]# cd rpmbuild/SOURCES
]# wget
https://codeload.github.com/sergey-dryabzhinsky/nginx-rtmp-module/zip/master
]# unzip nginx-rtmp-module-master.zip
]# mv nginx-rtmp-module-master nginx-rtmp-module
]# tar zcvf nginx-rtmp-module.tar.gz nginx-rtmp-module
]# vi rpmbuild/SPECS/nginx.spec
==========......(略)
Source12: COPYRIGHT
增加====> Source13: nginx-rtmp-module.tar.gz
......(略)
%prep
%setup -q
增加====> %setup -T -D -b 13
......(略)
%build
......(略)
增加"\" ==> --with-debug \
增加====>
--add-module=%{_builddir}/nginx-rtmp-module
make %{?_smp_mflags}
......(略)
增加"\" ==> --with-debug \
增加====>
--add-module=%{_builddir}/nginx-rtmp-module
==========......(略)
]# rpmbuild -bb rpmbuild/SPECS/nginx.spec
]# rpm -ivh nginx-1.10.2-1.el7.centos.ngx.x86_64.rpm
]# systemctl enable nginx
]# systemctl start nginx
2. rtmp的配置
rtmp的URL基础格式
rtmp://nginx_host[:nginx_port]/application_name/stream_name
让我们来看看一个最简化的rtmp配置:
rtmp {
server {
listen 1935;
chunk_size 4096;
application my-first-show {
live
on;
record
off;
}
}
}
rtmp,server,listen这几个指令的含义一目了然。
application定义了一个名为my-first-show的rtmp流
live on 打开了直播模式
record off 关闭录制模式,不将stream存储为flv文件
以上配置实现了一个最基本的可以接收stream的服务器,不做任何事,只是将接受到的stream转发出去。
让我们来做一个测试,使用obs。
打开OBS,创建一个profile,修改Broadcast Settings:
Streaming Service: Custom
Server: rtmp:///my-first-show
Play Path/Stream Key: test
也许你和我一样会疑惑"test"那里来的呢?呵呵,是我们刚刚创建的,在OBS中创建的,而不是在nginx配置中。
我们着一段影片,然后点击"Start
Streaming",如果OBS没有报错,那么stream已经推到了我们的nginx服务器上了。
然后我们在其他PC上使用VLC 2.1.0以后版本的播放器,打开一个Network stream,输入rtmp
URL:
rtmp:///my-first-show/test
点击play,如果出现了我们推上去的stream画面,就OK了。
3.rtmp统计信息查看
为了解当前服务器发送了或接收了多少数据,或当前运行了多少路stream,rtmp模块提供了一个stat页面。
不同于rtmp模块,这个stat功能需要放到http区段中定义。
]# cp nginx-rtmp-module/stat.xsl /path/to/stat/xsl/file/
]# vi /etc/nginx/nginx.conf
http {
server {
location /stat {
rtmp_stat
all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root
/path/to/stat/xsl/file;
}
}
}
打开浏览器,输入 http://your_host_ip/stat即可查看rtmp相关统计信息。
4.使用nginx-rtmp录制推送上来的流
application live1 {
live on;
record all;
record_append on;
record_path /path/to/storage;
}
record all 指明audio和video都要录制
record_append
录制暂停后,继续推流会追加到之前的文件,中间不会有间隔
application live3 {
live on;
meta copy;
recorder audio {
record audio manual;
record_suffix .audio.flv;
record_path D:\Capture\audio;
}
recorder chunked {
record all;
record_interval 15s;
record_suffix -%Y-%m-%d-%H%M.flv;
record_path /path/to/storage;
}
}
live3这个例子是分开录制音频和每隔15秒生成一个新文件。
更多关于认证,安全连接什么的,我没再细研究了,诸位看官可以自行看ngixn-rtmp-module的文档即可。
参考文档:
https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/blob/master/doc/directives.md
https://www.tekovic.com/adding-custom-modules-to-nginx-rpm
https://helping-squad.com/nginx-rtmp-how-to-use-secure-links/
https://helping-squad.com/nginx-rtmp-setup-rtmp-statistics/
https://helping-squad.com/setup-a-recorder-or-recordings-with-nginx/
https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/
https://www.leaseweb.com/labs/2013/11/streaming-video-demand-nginx-rtmp-module/
https://docs.peer5.com/guides/setting-up-hls-live-streaming-server-using-nginx/
https://www.vultr.com/docs/setup-nginx-rtmp-on-ubuntu-14-04