• (转载)学校搭建使用nginx同时编译rtmp-module进行直播的技术文档


    原文地址:学校搭建使用 nginx 同时编译 rtmp-module 进行直播的技术文档
    转载自我的大佬同学 MetalkgLZH。学校有几次需要全校观看网络直播的情况,但是学校的带宽不允许所有的班一起流畅观看。于是他用几台电脑做推流,所有的班级电脑拉流,来实现了全校直播。以下经验是几次实践后得出的,具有较强的可行性。


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

  • 相关阅读:
    RabbitMQ 入门
    Spring boot 2.x 中使用redis
    spring boot 中 Cache 的使用
    vbs 入门
    移动端文本框被原生键盘弹出后挡住文本框
    HTML中添加音乐video embed audio
    input修改placeholder文字颜色
    vue中更换.ico图标报错路径找不到图片
    Chrome表单文本框自动填充黄色背景色样式
    请求头缺少 'Access-Control-Allow-Origin'
  • 原文地址:https://www.cnblogs.com/miserweyte/p/11454802.html
Copyright © 2020-2023  润新知