(转载)学校搭建使用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
。
直接点击开始推流。
拉流软件
打开链接输入 rtmp://88.88.88.88/live
即可
几点补充说明
在几乎所有的实现中打开
http://88.88.88.88/stat
会进入一个简陋的监控页面。本机搭建服务器本机,同时,本机也是推流机时,推流地址请设置为
rtmp://localhost/live
利用 localhost 降低系统占用。
针对可能需要用一台推流机向多个服务器推流的办法正在撰写,敬请期待。 ——MetalkgLZH
(转载)学校搭建使用nginx同时编译rtmp-module进行直播的技术文档的更多相关文章
- 无需编译、快速生成 Vue 风格的文档网站
无需编译.快速生成 Vue 风格的文档网站 https://docsify.js.org/#/#coverpage https://github.com/QingWei-Li/docsify/
- Docker最全教程之使用Node.js搭建团队技术文档站(二十三)
前言 各种编程语言均有其优势和生态,有兴趣的朋友完全可以涉猎多门语言.在平常的工作之中,也可以尝试选择相对适合的编程语言来完成相关的工作. 在团队技术文档站搭建这块,笔者尝试了许多框架,最终还是选择了 ...
- nginx,apache,tomcat配置https的阿里提供的文档
安装证书 ( 1 ) 打开 Nginx 安装目录下 conf 目录中的 nginx.conf 文件,找到 # HTTPS server # #server { # listen 443; # serv ...
- Sping源码+Redis+Nginx+MySQL等七篇实战技术文档,阿里大佬推荐
JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. 引入 ...
- centos 6.6编译安装nginx--来自阿里云帮助文档
刚开始接触运维工作, 需要安装nginx,就在网上找了各种的方法, 结果都是大家抄来抄去,都不好用. 由于公司用的是阿里云的服务器, 所以在阿里云上找到了安装nginx的方法,现在摘抄下来,供大家借鉴 ...
- 【技术文档】jeecg3.7-maven搭建好开发环境入门
JEECG 微云高速开发平台(3.7)Maven版本号手把手入门手冊 官方标准开发工具:1.IDE Eclipse Java EE IDE for Web Developers. ...
- 【技术文档】jeecg3.7.3-maven搭建环境入门
JEECG 微云快速开发平台(3.7.3)Eclipse-Maven版本手把手入门手册 官方标准开发工具:1. IDE Eclipse Java EE IDE for Web Devel ...
- 转自 阿里云技术文档的 centos + PHP 环境 搭建
产品亮点 1.基于阿里云CentOS7.2镜像 2.采用yum方式安装,软件安装均为默认目录,未作任何修改. 3.采用经典LAMP组合,拓展性强,资源丰富,解决方案较多 4.附带PhpMyadmin和 ...
- 一文搭建自己博客/文档系统:搭建,自动编译和部署,域名,HTTPS,备案等
本文纯原创,搭建后的博客/文档网站可以参考: Java 全栈知识体系.如需转载请说明原处. 第一部分 - 博客/文档系统的搭建 搭建博客有很多选择,平台性的比如: 知名的CSDN, 博客园, 知乎,简 ...
随机推荐
- 地图的标注Marker
(1)在point处添加标注:var marker = new BMap.Marker(point); (2)添加覆盖物:map.addOverlay(marker); (3)激活标注的拖拽功能:ma ...
- 编程小技巧之 Linux 文本处理命令
合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本文简单的介绍三个能使用 Linux 文本处理命令的场景,给大家开阔一下思路 ...
- MySQL 深入理解索引B+树存储 (转载))
出处:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一 ...
- (八十三)c#Winform自定义控件-导航菜单(扩展)
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- java核心技术36讲笔记
Java-Basic 谈谈final. finally. finalize有什么不同? 典型回答: final可以用来修饰类.方法.变量,分别有不同的意义, final修饰的class代表不可以继承扩 ...
- angular之路由
一.核心问题 路由要解决的核心问题是通过建立url和页面之间的对应的关系,使不同的页面可以通过不用的url来展示. 首先,当用户在浏览器上输入URL后,Angular将获取该URL并将其解析生成一个U ...
- group by 如何合并字符串优化记?
sqlserver 2005及以上版本 表(tb) id value 1 aa 2 cc 3 bb 3 dd 4 aa 4 cc 4 dd ...
- 导图梳理springboot手动、自动装配,让springboot不再难懂
什么是springboot 在学springboot之前,你必须有spring.spring mvc基础,springboot的诞生其实就是用来简化新Spring应用的初始搭建以及开发过程,该框架使用 ...
- 使用ipython %matplotlib inline
首先讲讲这句话的作用,matplotlib是最著名的Python图表绘制扩展库,它支持输出多种格式的图形图像,并且可以使用多种GUI界面库交互式地显示图表.使用%matplotlib命令可以将matp ...
- 一个关于内联优化和调用约定的Bug
很久没有更新博客了(博客园怎么还不更新后台),前几天在写一个Linux 0.11的实验 [1] 时遇到了一个奇葩的Bug,就在这简单记录一下调试过程吧. 现象 这个实验要求在Linux 0.11中实现 ...