本文系MetalkgLZH原创,转载请注明出处
转载自
编译带有nginx-rtmp-module的nginx请见本博客的有关文章。 点击跳转
也可以使用预编译好的版本 --见Github主页
对于Windows操作系统,可以使用nginx-rtmp-module的github release提供的下载,也可以使用本站对国内优化速度的下载
Github Release ---- 本站下载
流服务器
我们可以利用nginx编译有nginx-rtmp-module搭建一个很高效率的流服务器。默认的配置文件是这样的
#user nobody; # multiple workers works ! worker_processes 2; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 8192; # max value 32768, nginx recycling connections+registry optimization = # this.value * 20 = max concurrent connections currently tested with one worker # C1000K should be possible depending there is enough ram/cpu power # multi_accept on; } rtmp { server { listen 1935; chunk_size 4000; application live { live on; } } }
现在对其中的条项一个个解释。
#user nobody
是指运行Nginx的用户,一般设置为root或者www,如果担心安全问题,可以使用$ chmod 777 /usr/local/nginx/html/live
给所有用户live路径的一切权限。然后使用nobody运行。
worker_processes 2;
是指nginx子进程nginx 8737 8467 0 11:44 ? 00:00:00 nginx: worker process
的数量,一般设置为当前服务器CPU的线程数量。这个例子中我们使用32。
- logs
#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;
这些指errorlog记录的内容。打开越多,errorlog越详细。这里选择把注释全删掉。
-#pid logs/nginx.pid;
这是一个文本文件,记录的是worker_process的进程号,可以去掉注释。本例中选择去掉。
- events //nginx事件模块
events { worker_connections 8192; # max value 32768, nginx recycling connections+registry optimization = # this.value * 20 = max concurrent connections currently tested with one worker # C1000K should be possible depending there is enough ram/cpu power # multi_accept on; }
worker_connections xxx;是指工作进程的最大连接数量,这里使用1024。
同时这个参数有IO模型的参数,可以选择标准IO模型use epoll;
同时可以通过包含其他含有events模块的conf文件进行设置。还有一个标准事件模型select
,其中的具体区别就不在这里讨论了。Linux 2.6内核以后请直接选择epool
。
- 终于来到了rtmp事件
rtmp { server { listen 1935; chunk_size 4000; application live { live on; } } }
rtmp
指事件,server
创建了一个"虚拟服务器"(这个说法并不严谨,但是可以这么理解)
listen
指定监听的端口,我们这里直接使用默认的1935。
chunk_size
可以直接使用默认的4096,流复用的最大块大小。默认值是4096.这个值越大,CPU开销就越低。这个值不能小于128。具体的解释请见rtmp协议的解释,这里不再展开。
application
是创建rtmp应用程序,使用live就会把你的$your_ngx_installation_path/html/live
作为rtmp流的目录。
live
设置为on
开启live。
本例几乎演示了最简单的rtmp{...}
用法,更多信息详见其文档,这里不再展开。
- 经过设置,贴出我使用的文档
user root; worker_processes 32; error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; pid logs/nginx.pid; events { worker_connections 1024; # max value 32768, nginx recycling connections+registry optimization = # this.value * 20 = max concurrent connections currently tested with one worker # C1000K should be possible depending there is enough ram/cpu power # multi_accept on; } rtmp { server { listen 1935; chunk_size 4096; application live { live on; } } }
推流软件
这里采用Open Broadcaster Software的开源软件OBS Studio。
官方网站 OBS需要VC2017运行库支持,请注意。 本站分流
推流软件设置合适码率,合适的分辨率,服务器地址形似rtmp://88.88.88.88/live
。
直接点击开始推流。
拉流软件
打开链接输入rtmp://88.88.88.88/live
即可
几点补充说明
在几乎所有的实现中打开
http://88.88.88.88/stat
会进入一个简陋的监控页面。本机搭建服务器本机,同时,本机也是推流机时,推流地址请设置为
rtmp://localhost/live
利用localhost降低系统占用。
针对可能需要用一台推流机向多个服务器推流的办法正在撰写,敬请期待。 ——MetalkgLZH