原文地址:学校搭建使用 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. 是男人就过八题A_A String Game题解

    题意 给一个字符串\(s\),和\(n\)个子串\(t[i]\),两个人博弈,每次取出一个串\(t[i]\),在后面加入一个字符,保证新字符串仍然是\(s\)的子串,无法操作的人输. 分析 n个子串, ...

  2. kotlin系列文章 --- 3.条件控制

    if表达式 一个if语句包含一个布尔表达式和一条或多条语句 // 基础用法 var max = a if (a<b) max = b // 加上else var max: Int if(a> ...

  3. 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)

    定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...

  4. Java基础学习(七) - 异常处理

    1.异常概念 异常指的是程序在执行过程中出现的非正常的情况,导致JVM的非正常停止.在Java中,异常是一个类,产生异常就是创建异常对象并抛出一个异常对象. 异常指的并不是语法错误,语法错误,编译不会 ...

  5. 分享8点超级有用的Python编程建议

    我们在用Python进行机器学习建模项目的时候,每个人都会有自己的一套项目文件管理的习惯,我自己也有一套方法,是自己曾经踩过的坑总结出来的,现在在这里分享一下给大家,希望多少有些地方可以给大家借鉴.

  6. JZOJ 3875 星球联盟

    [问题描述] 在遥远的 S 星系中一共有 N 个星球,编号为 1…N.其中的一些星球决定组成联盟, 以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这 N 个星球间有 M 条太空 ...

  7. 各种常见文件的hex文件头

    我们在做ctf时,经常需要辨认各种文件头,跟大家分享一下一些常见的文件头.   扩展名 文件头标识(HEX) 文件描述 123 00 00 1A 00 05 10 04 Lotus 1-2-3 spr ...

  8. ubuntu使用uwsgi+nginx部署django

    ls -lha export WORKON_HOME=~/venv source /usr/local/bin/vitualenvwrapper.sh VIRTUALENVWRAPPER_PYTHON ...

  9. vue-cli中使用jquery

    一.安装依赖 npm install jquery --save 二.全局导入(必须先安装依赖) 第一步 在webpack.base.conf.js里加入(新版的可能找不到这个文件,你可以npm in ...

  10. Oracle基于延时的盲注总结

    0x00 前言 oracle注入中可以通过页面响应的状态,这里指的是响应时间,通过这种方式判断SQL是否被执行的方式,便是时间盲注: oracle的时间盲注通常使用DBMS_PIPE.RECEIVE_ ...