原文地址:学校搭建使用 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

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

  1. 无需编译、快速生成 Vue 风格的文档网站

    无需编译.快速生成 Vue 风格的文档网站 https://docsify.js.org/#/#coverpage https://github.com/QingWei-Li/docsify/

  2. Docker最全教程之使用Node.js搭建团队技术文档站(二十三)

    前言 各种编程语言均有其优势和生态,有兴趣的朋友完全可以涉猎多门语言.在平常的工作之中,也可以尝试选择相对适合的编程语言来完成相关的工作. 在团队技术文档站搭建这块,笔者尝试了许多框架,最终还是选择了 ...

  3. nginx,apache,tomcat配置https的阿里提供的文档

    安装证书 ( 1 ) 打开 Nginx 安装目录下 conf 目录中的 nginx.conf 文件,找到 # HTTPS server # #server { # listen 443; # serv ...

  4. Sping源码+Redis+Nginx+MySQL等七篇实战技术文档,阿里大佬推荐

    JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. 引入 ...

  5. centos 6.6编译安装nginx--来自阿里云帮助文档

    刚开始接触运维工作, 需要安装nginx,就在网上找了各种的方法, 结果都是大家抄来抄去,都不好用. 由于公司用的是阿里云的服务器, 所以在阿里云上找到了安装nginx的方法,现在摘抄下来,供大家借鉴 ...

  6. 【技术文档】jeecg3.7-maven搭建好开发环境入门

    JEECG 微云高速开发平台(3.7)Maven版本号手把手入门手冊 官方标准开发工具:1.IDE        Eclipse Java EE IDE for Web Developers.    ...

  7. 【技术文档】jeecg3.7.3-maven搭建环境入门

    JEECG 微云快速开发平台(3.7.3)Eclipse-Maven版本手把手入门手册 官方标准开发工具:1. IDE        Eclipse Java EE IDE for Web Devel ...

  8. 转自 阿里云技术文档的 centos + PHP 环境 搭建

    产品亮点 1.基于阿里云CentOS7.2镜像 2.采用yum方式安装,软件安装均为默认目录,未作任何修改. 3.采用经典LAMP组合,拓展性强,资源丰富,解决方案较多 4.附带PhpMyadmin和 ...

  9. 一文搭建自己博客/文档系统:搭建,自动编译和部署,域名,HTTPS,备案等

    本文纯原创,搭建后的博客/文档网站可以参考: Java 全栈知识体系.如需转载请说明原处. 第一部分 - 博客/文档系统的搭建 搭建博客有很多选择,平台性的比如: 知名的CSDN, 博客园, 知乎,简 ...

随机推荐

  1. linux 更改文件所属用户及用户组

      在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户.该文件用户可以修改该文件的拥有者及用户组,当然root用户可以修改任何文件的拥有者及用户组.在Linux中,对于文件的权限(rw ...

  2. Vue.js实战学习笔记(中)

    1.递归组件给组件设置name属性,组件就可以在它的模板内调用自己,但必须给一个条件来限制递归数量.<div id="app"> <child-component ...

  3. springboot与docker整合

    一.springboot与docker整合 a.创建Dockerfile FROM java MAINTAINER "Wing"<1561815137@qq.com> ...

  4. [LeetCode] 1137. N-th Tribonacci Number

    Description e Tribonacci sequence Tn is defined as follows: T0 = 0, T1 = 1, T2 = 1, and Tn+3 = Tn + ...

  5. Java 2019 生态圈使用报告,这结果你赞同吗?

    这是国外一机构调查了 7000 名开发者得出来的 Java 2019 年生态圈工具使用报告,主要调查了 Java 版本.开发框架.web 服务器等使用情况.虽然只有 7000 名开发者参与调查,这数目 ...

  6. mpvue 页面预加载,新增preLoad生命周期

    存在的必要性:mpvue开发微信小程序,在页面跳转到新页面的过程中会有200ms左右的延迟,这个200ms如果用来请求新页面的接口,那么跳转到新页面或许已经渲染好了页面. 就是两种方式: 1.新页面跳 ...

  7. shell读取文件写入新文件

    #!/bin/sh #系统简称 SYST="HVPS" #发送行号 SEND1234SEND=" #接收行号 RECV1234RECV=" cd /home/w ...

  8. CTF-SSH服务渗透

    环境 Kali ip 192.168.56.102 Smb 靶机ip 192.168.56.101 0x01信息探测 首页发现有类似用户名的信息 先记录下来 Martin N Hadi M Jimmy ...

  9. windows进程中的内存结构(缓冲溢出原理)

    接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据.那么这些变量在内存中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论.下文中的C语言代码如没有特别声明,默认都使 ...

  10. PHP key_exists

    此函数同array_key_exsits(). 1.函数的作用:判断一个数组是否含有某个键值 2.函数的参数: @param string  $key @param array $haystack 3 ...