转载自MetalkgLZH

大兔子大兔子 提交于 2019-11-29 04:51:30

本文系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

直接点击开始推流。

拉流软件

这里采用开放源代码的VLC官网.....本站分流

打开链接输入rtmp://88.88.88.88/live即可

几点补充说明

  • 在几乎所有的实现中打开http://88.88.88.88/stat会进入一个简陋的监控页面。

  • 本机搭建服务器本机,同时,本机也是推流机时,推流地址请设置为rtmp://localhost/live利用localhost降低系统占用。


针对可能需要用一台推流机向多个服务器推流的办法正在撰写,敬请期待。 ——MetalkgLZH

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!