Quantcast
Channel: polygun2000的博客
Viewing all articles
Browse latest Browse all 55

使用nginx-rtmp-module做推流服务器

$
0
0
公司视频部门的需求,要一个接收推流的服务器,据他们说之前用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


 

Viewing all articles
Browse latest Browse all 55

Trending Articles