前一阵,在一位大佬的博客上曾看到过一篇类似的文章,最近突然有朋友想要多平台直播,又找不到之前的,便在网上搜集了一番,整理了一下。这样做的好处是,节省本地带宽,分发给多平台的步骤交给远端的服务器进行处理。
准备工作
如果您已经安装好 Nginx 和 nginx-rtmp-module 可以跳过此部分
使用包管理安装的 Nginx
因为我已经安装过 Nginx,使用的是使用包管理安装的 Nginx,您也可以选择编译安装的方式进行,因为本人太菜,每次进行编译都会出错,所以此处不在阐述。Nginx 官方有打包好的 Nginx 可以直接通过 apt-get install nginx -y
完成安装,但是这样做的后果是你安装的是一个可能非常老旧和充满隐患的 Nginx (此部分摘自 DCC大佬 的博客)
Ondřej Surý 的 PPA
更新非常快速,而且做的质量也非常好。
对于 Ubuntu 系列:
1
| add-apt-repository ppa:ondrej/nginx-mainline -y
|
对于 Debian 系列:
1 2 3 4 5
| wget -O /etc/apt/trusted.gpg.d/nginx-mainline.gpg https://packages.sury.xyz/nginx-mainline/apt.gpg
cat >> /etc/apt/sources.list.d/nginx.list << EOF deb https://packages.sury.xyz/nginx-mainline/ $(lsb_release -sc) main EOF
|
然后我们更新系统、安装必要组件和 Nginx 本身:
1
| apt update && apt install nginx-extras -y
|
查看 Nginx 版本和参数和安装目录
烧饼博客大佬打包的 Nginx
使用最新 OpenSSL 编译,支持 TLS 1.3, GeoIP2, brotli 压缩等
使用方法
1 2 3 4
| curl https://mirror.xtom.com/sb/nginx/public.key | apt-key add - echo "deb http://mirror.xtom.com/sb/nginx stretch main" > /etc/apt/sources.list.d/sb-nginx.list apt update apt install nginx-extras
|
安装成功后使用 nginx -V
查看信息
完成 Nginx 的安装后,接下来安装 rtmp 模块
安装 rtmp 模块
debian 9 用户可以直接使用 apt 安装,需启用 stretch-backports 源:
1
| apt install libnginx-mod-rtmp libnginx-mod-http-lua -t stretch-backports
|
安装完成后,准备阶段就结束了,下面开始配置 Nginx。
配置 Nginx
打开 nginx.conf 在文件中添加以下部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| rtmp { #RTMP服务 server{ listen 1935; #服务端口 chunk_size 10240; #数据传输块的大小
application live { #直播 live on; record off; on_publish http://YOUR_SERVERNAME:2080/auth; push rtmp://live.twitch.tv/app/YOUR_LIVE_API; #RTMP直播地址1 push rtmp://a.rtmp.youtube.com/YOUR_LIVE_API; #RTMP直播地址2 } } }
|
替换上方的 RTMP直播地址需要自己进行替换,现在我们完成了服务器上的分流部分
接下来,我们配置一个 http 服务器,此部分与平时配置网站 conf 的过程比较类似
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| server { listen 2080; #此处可自定义 server_name YOUR_SERVERNAME; location /auth { rewrite_by_lua ' ngx.req.read_body() local name = ngx.req.get_post_args().name if (name == "xxxYOUR_UUID") then ngx.status = 200 ngx.say("OK") ngx.exit(200) else ngx.status = 403 ngx.say("Forbidden") ngx.exit(403) end '; } }
|
此处的 xxxYOUR_UUID
是我们使用 OBS 推流时候的"流名称",可以使用 UUID Generator 进行生成。
经测试不能加 TLS
测试 RTMP 服务器配置
启动 Nginx 服务后,在服务器上执行下面的命令:
1
| curl -0 http://127.0.0.1:2080/auth -d "name=xxxYOUR_UUID"
|
xxxYOUR_UUID
替换成前面生成的 UUID,应该输出 OK,再把 xxxYOUR_UUID
换成一个错误的,应该输出 Forbidden。
配置 OBS 推流
如果身份验证没有问题,我们就可以使用 OBS 来推流了。
在 OBS 设置中选择“自定义流媒体服务器”,URL 填入 rtmp://YOUR_SERVERNAME/live
(YOUR_SERVERNAME
是推流服务器的 IP或域名), 流名称填入我们前面生成的 UUID。
设置好后单击 OBS上的“开始推流”,不出意外的话就可以同时向我们设置的平台推流了。
参考文章
Debian / Ubuntu 环境下 LEMP 建站解析
arut/nginx-rtmp-module
illuspas/nginx-rtmp-win32
借助 Nginx 搭建带简单认证的直播推流服务器,实现多平台同步直播
Nginx学习之配置RTMP模块搭建推流服务
直播推流nginx-rtmp-module集成