原文地址:学校搭建使用 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. ArcSDE编辑数据ArcMap系统崩溃

    问题描述:用ArcMap编辑Oracle中ArcSDE空间数据,一修改,ArcMap系统就停止响应,然后崩溃 开发的Engine系统操作数据库,然后在客户端蓝屏后,数据库空间数据就出现了不可编辑状态. ...

  2. Openshift创建Router和Registry

    Openshift创建Router和Registry: [root@DockerServer openshift]# oadm policy add-scc-to-user privileged sy ...

  3. php导出excel乱码怎么处理

    使用PHP导出excel文档,有时候莫名其妙就会出现导出的数据乱码,现在推荐一个万能修补大法 话不多说,直接上代码 核心就是在处理完数据之后,输出excel文件之前 添加 ob_end_clean() ...

  4. Nginx的基本安装配置

    Centos7安装nginx 升级nginx 升级可能遇到问题(我没有遇到, 参考的另一篇文章描述的) 检查nginx版本, 确认安装成功 nginx配置文件 虚拟主机配置 配置文件中可以用的全局变量 ...

  5. 个性化推荐产品功能的设计和B端产品的功能策划方式

    宜信科技中心财富管理产品部负责人Bob,与大家一起聊聊个性化推荐产品功能的设计和B端产品的功能策划方式. 拓展阅读:回归架构本质,重新理解微服务|专访宜信开发平台(SIA)负责人梁鑫 智慧金融时代,大 ...

  6. vue常见问题随笔集

    1.vuex操作对应关系 设置          触发/获取 action <-> dispatch mutations <-> commit getters <-> ...

  7. 04-09 XgBoost算法

    目录 XgBoost算法 一.XgBoost算法学习目标 二.XgBoost算法详解 2.1 XgBoost算法参数 2.2 XgBoost算法目标函数 2.3 XgBoost算法正则化项 2.4 X ...

  8. 尹吉峰:使用 OpenResty 搭建高性能 Web 应用

    2019 年 8 月 31 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·成都站,原贝壳找房基础架构部工程师尹吉峰在活动上做了<使用 O ...

  9. 《java编程思想》P160-P180(第八章部分+第九章部分)

    1.什么是多态? 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 现实中,关于多态的例子不胜枚举.比方说按下 F1 ...

  10. 算法---ALGO-3 Java K好数 蓝桥杯

    package Main; import java.io.InputStream; import java.util.Scanner; public class Main { public stati ...