基于 Nginx 搭建一个 RTMP 推流服务端

填上了去年挖的坑

起因

前几天一个主播朋友因为直播需要,需要搭建一个推流服务器。
推流服务器比较常用的是 RTMP 协议,Nginx 就有这方面的模块。
刚好我这段时间在研究 Nginx,于是就答应下来帮他整一整。

解决方案

由于 Nginx 默认发行的二进制文件是不带 RTMP 推流模块的,所以这次只能跑源码编译了。
如果你的网络下载不方便,可以去 附件 获取编译所需要的文件
系统选用的是 Debian 11,内核 5.10.0-10-amd64

下载相关的源码

Nginx 的源码:http://nginx.org/en/download.html
Nginx RTMP 模块的源码:https://github.com/arut/nginx-rtmp-module/tags
PCRE 的源码:https://github.com/PhilipHazel/pcre2/releases
OpenSSL 的源码:https://github.com/openssl/openssl/tags
zlib 的源码:http://zlib.net/

下载之后,应该会有这几个文件(版本号可能不同,但总体名称应该差不多)

安装依赖

1
apt install gcc make zip -y

将下载后的源码文件解压,然后进入 Nginx 源码目录

开始编译

替换其中部分依赖的源码目录(就是上面下载的源码解压的目录)

1
2
3
4
5
./configure \
--add-module=/root/nginx-rtmp-module-1.2.2 \
--with-pcre=/root/pcre2-10.39 \
--with-openssl=/root/openssl-openssl-3.0.1 \
--with-zlib=/root/zlib-1.2.11

确认输出后的内容无误

跑一次 make

1
make

跑完之后就可以在 objs 目录看到输出文件了
如果是第一次安装,还可以再跑个

1
make install

然后,就可以在 /usr/local/nginx/sbin (configure 输出的目录)中看到 nginx 了

之后便可以正常启动 nginx 了

启动推流服务器

在 /usr/local/nginx/conf/nginx.conf 中与 http 项同级的位置插入一段(这段 Copy 自 这篇专栏

1
2
3
4
5
6
7
8
9
10
rtmp {                #RTMP服务
server {
listen 1935; #//服务端口
chunk_size 4096; #//数据传输块的大小
application live{ #直播应用程序的名字
live on;
}
}
}

然后在 http 项里插入这段,注意要把 RTMP 模块移动到 /usr/local/src/ 下

1
2
3
4
5
6
7
8
location /stat {     #nginx匹配stat路径查看rtmp状态。
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}

location /stat.xsl { #添加rtmp模块的位置。
root /usr/local/src/nginx-rtmp-module-1.2.2;#rtmp模块路径
}

修改完之后启动 Nginx

1
/usr/local/nginx/sbin/nginx

访问 主机IP/stat (例如 http://1.1.1.1/stat )即可看到 RTMP 模块的运行状态

踩过的坑

缺失依赖库

在 configure 的时候,遇到了三个依赖库的缺失。

起初 OpenSSL 报错的时候我以为是因为这台主机没装 OpenSSL 导致的,但我装上 OpenSSL 后还是报错,不是很清楚是什么情况,可能是某种特性(?)

源码文件留存必要

起初我以为源码文件是不能删的,实际上在编译之后源码就可以删掉了(因为没什么用了)

监测 RTMP 服务状态报错:「载入样式表单出错: 分析 XSLT 样式表单失败。」

刚开始我还以为是因为删源码导致的问题(不过确实 RTMP 的源码不能删)于是把 RTMP 的源码又下了一遍,解压到 /root/ 下
还是报错。
查了一下,才发现有可能是 /root/ 目录 Nginx 无权限访问导致的,于是把 RTMP 模块移动到 /usr/local/src/ 下,并修改了 nginx.conf,解决~

附件

附一份编译所需要的文件

nginx-1.21.5.tar.gz
nginx-rtmp-module-1.2.2.zip
openssl-openssl-3.0.1.zip
pcre2-10.39.tar.gz
zlib-1.2.11.tar.gz