(转载)学校搭建使用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
最新文章
- 设置Android程序图标
- Android PopupWindow的使用和分析
- google hack 之 查询语法
- [Hibernate 2]session的三种状态
- 将Java程序作成exe文件的几种方法【转载】
- SPOJ 3937 - Wooden Sticks 最长上升子序列LIS
- sqlserver如何启动数据库邮件
- EF Unit Of Work
- Windows10远程报错:由于CredSSP加密Oracle修正导致远程失败
- fliplr函数
- JavaFX-Platform&;Screen
- ubuntu 16.04下源码安装opencv3.4
- ingress rewrite
- 【逆向工具】IDA使用3-全局变量、数组、结构体
- WebActivatorEx—动态注册httpmodle
- JDK7 异常的多重捕获
- python闭包,看不懂请揍我
- 正则 js分转元带千分符号
- Android actionbar 笔记
- SignalR支持的平台