你的直播流每次都崩溃吗?如果是这样,你需要找到一种可靠的方式来托管你的流。但如果你负担不起昂贵的选择,别担心!NGINX RTMP会拯救你。NGINX RTMP是一个可靠的开源模块,所以你知道这意味着什么——它是免费的!
在这个教程中,你将学习如何设置NGINX RTMP服务器,这样你就可以在你的网站上建立一个可靠的直播流。
准备好了吗?继续阅读,开始设置直播流吧!
先决条件
本教程将是一个动手演示。如果你想跟着做,请确保你具备以下条件:
- A Linux server – This demo uses Ubuntu 20.04 LTS, but you can use any other Linux distribution with NGINX.
- A non-root user with sudo privileges.
- 运行直播流服务器所需的最低资源 – 2G内存,2个CPU核心和20GB硬盘空间。
这些值仅供参考。确切的值取决于你的实际流量需求。你的流量越大,你就需要越强大的服务器来托管和传输直播视频。在开发环境中,带有2个CPU和2GB内存的NGINX RTMP服务器足以进行测试。
配置RTMP服务器
现在前提条件已经解决,您可以继续安装和配置您的 RTMP 服务器。首先,您需要安装一个 NGINX 模块,将您的 NGINX 服务器转换为 RTMP 服务器,然后配置 NGINX 配置文件以启用用户的直播流。
1. 打开您的终端并运行 apt update
命令,以更新所有软件包。此命令将您的软件包数据库与 Ubuntu 的最新数据库进行同步。

2. 接下来,运行以下命令,在您的 Linux 服务器上安装 RTMP 服务器。
libnginx-mod-rtmp
模块是一个 NGINX 模块,可以将您的 NGINX 服务器转换为 RTMP 服务器。此模块使 NGINX 能够与 Adobe Flash 播放器通信,以便您可以直播视频或音频,并得到其开发团队的官方支持。

3. 使用您喜欢的编辑器打开 /etc/nginx/nginx.conf 文件,以配置您的 RTMP 直播程序。nginx.conf 文件是一个 NGINX 配置文件,包含了多个指令或块,用于定义 NGINX 服务的行为。
4. 最后,填写以下代码到 nginx.conf 文件中,保存更改并退出编辑器。
下面的代码告诉 NGINX 充当 RTMP 服务器,并为您的用户启用直播流。
通过设置防火墙来保护网络
您已经配置了 NGINX RTMP 服务器,但是您需要保护您的网络并控制流量。如何做到?通过设置防火墙,Uncomplicated Firewall(UFW),这是 Ubuntu 中的默认防火墙。
如果将NGINX RTMP服务器放在防火墙后,您需要允许NGINX RTMP服务器端口处于开放状态。由于您已配置NGINX RTMP服务器以侦听端口1935
,因此您将允许通过防火墙的此端口。
1. 运行以下命令添加防火墙规则,打开防火墙上的1935
端口。此防火墙规则允许所有传入和传出请求访问NGINX RTMP服务器端口1935
。

2. 接下来,运行以下命令禁用然后重新启用防火墙。该命令基本上重新启动防火墙,以便对防火墙的任何更改生效。
3. 最后,运行以下命令检查防火墙的状态并验证端口1935
是否可以从所有IP地址(任何地方)访问。

使用FFmpeg进行视频流
您的NFINX RTMP服务器现在已经启动,现在是使用FFmpeg创建示例视频并通过NGINX RTMP服务器进行流式传输的时候了。FFmpeg是在许多不同应用程序中记录、转换和流式传输音频和视频的完整解决方案,如VLC、OMXPlayer、VobSub等。
您将在服务器上测试视频流,可以使用任何大小较小的视频进行流式传输。
1. 运行以下apt install
命令以安装FFmpeg正常运行所需的依赖项。
以下命令安装了以下内容:
libpcre3
– 一个正则表达式库,由ffmpeg工具包用于帮助解析和编译正则表达式。libpcre3-dev
– 该软件包包含了libpcre3软件包的开发头文件。libssl-dev
– OpenSSL加密库用于在您的RTMP服务器中创建SSL/TLS连接。zlib1g-dev
:zlib库是一个压缩和解压库,用于加快音频和视频文件在互联网上传输的速度。

2. 接下来,在您的服务器上运行以下命令来安装ffmpeg
。

3. 最后,运行ffmpeg
命令执行以下操作并创建新的直播流:
- 从源文件(
i
)以原始帧率读取输入(re
)。请务必将video.mp4
替换为您视频的路径和文件名。 - 逐字复制视频格式(
c:v copy
),并使用AAC编解码音频(c:a aac
)。 - 将音频采样率设置为44100 Hz(
ar 44100
)。如果您视频的采样率小于此值(44100 Hz),FFmpeg会执行插值以增加采样率。 - 将音频通道设置为单声道(mono)(
ac 1
),以及FFmpeg将流式传输的视频格式(-f flv
)。 - 设置您在“配置RTMP服务器”部分(第四步)配置的RTMP直播程序(
rtmp://localhost/live/streamname.flv
)。您可以将streamname.flv
更改为您喜欢的任何名称。
如下所示,ffmpeg
命令会打印出其检测到的每秒帧数,比特率以及新创建的RTMP直播流的帧率。

结论
在本教程中,您学会了如何通过修改NGINX配置文件在NGINX RTMP服务器上设置并启用直播流。您还了解了如何使用FFmpeg工具通过NGINX RTMP服务器设置视频直播流。
您刚刚意识到,建立直播流不一定要花费您的每一分钱。此时,为什么不使用HTML5的<video>元素将您的流集成到您的网页中?或者为您的RTMP流设置OBS Studio呢?