原文地址:学校搭建使用 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. 地图的标注Marker

    (1)在point处添加标注:var marker = new BMap.Marker(point); (2)添加覆盖物:map.addOverlay(marker); (3)激活标注的拖拽功能:ma ...

  2. 编程小技巧之 Linux 文本处理命令

    合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本文简单的介绍三个能使用 Linux 文本处理命令的场景,给大家开阔一下思路 ...

  3. MySQL 深入理解索引B+树存储 (转载))

    出处:http://blog.codinglabs.org/articles/theory-of-mysql-index.html   摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一 ...

  4. (八十三)c#Winform自定义控件-导航菜单(扩展)

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  5. java核心技术36讲笔记

    Java-Basic 谈谈final. finally. finalize有什么不同? 典型回答: final可以用来修饰类.方法.变量,分别有不同的意义, final修饰的class代表不可以继承扩 ...

  6. angular之路由

    一.核心问题 路由要解决的核心问题是通过建立url和页面之间的对应的关系,使不同的页面可以通过不用的url来展示. 首先,当用户在浏览器上输入URL后,Angular将获取该URL并将其解析生成一个U ...

  7. group by 如何合并字符串优化记?

    sqlserver 2005及以上版本 表(tb) id    value 1     aa 2     cc 3     bb 3     dd 4     aa 4     cc 4     dd ...

  8. 导图梳理springboot手动、自动装配,让springboot不再难懂

    什么是springboot 在学springboot之前,你必须有spring.spring mvc基础,springboot的诞生其实就是用来简化新Spring应用的初始搭建以及开发过程,该框架使用 ...

  9. 使用ipython %matplotlib inline

    首先讲讲这句话的作用,matplotlib是最著名的Python图表绘制扩展库,它支持输出多种格式的图形图像,并且可以使用多种GUI界面库交互式地显示图表.使用%matplotlib命令可以将matp ...

  10. 一个关于内联优化和调用约定的Bug

    很久没有更新博客了(博客园怎么还不更新后台),前几天在写一个Linux 0.11的实验 [1] 时遇到了一个奇葩的Bug,就在这简单记录一下调试过程吧. 现象 这个实验要求在Linux 0.11中实现 ...