如何设置用于流媒体的NGINX RTMP服务器

你的直播流每次都崩溃吗?如果是这样,你需要找到一种可靠的方式来托管你的流。但如果你负担不起昂贵的选择,别担心!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 的最新数据库进行同步。

sudo apt update -y
Updating all your packages

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

libnginx-mod-rtmp 模块是一个 NGINX 模块,可以将您的 NGINX 服务器转换为 RTMP 服务器。此模块使 NGINX 能够与 Adobe Flash 播放器通信,以便您可以直播视频或音频,并得到其开发团队的官方支持。

sudo apt install libnginx-mod-rtmp -y
installing an RTMP server

3. 使用您喜欢的编辑器打开 /etc/nginx/nginx.conf 文件,以配置您的 RTMP 直播程序。nginx.conf 文件是一个 NGINX 配置文件,包含了多个指令或块,用于定义 NGINX 服务的行为。

4. 最后,填写以下代码到 nginx.conf 文件中,保存更改并退出编辑器。

下面的代码告诉 NGINX 充当 RTMP 服务器,并为您的用户启用直播流。

 # 这段代码告诉 NGINX 充当 RTMP 服务器。 

rtmp {
		server {
		
 # 设置服务器监听的端口。

    listen 1935;
				
 # 每个数据块的大小将被发送。

				
 # 如果块太小,Flash Player 将会冻结,

				
 # 这可能导致缓冲不足的情况。

        chunk_size 4096;
				
 # 允许 IP 地址发布内容到服务器。

				
 # 仅允许本地主机在 NGINX RTMP 上发布内容。

				allow publish 127.0.0.1;
				
 # 拒绝其他所有人的发布。

				deny publish all;
				
 # 定义一个名为 "live" 的应用程序。

        application live {
				
 # 告诉 NGINX 为您的用户启用直播流。

						live on;
				
 # 此行告诉 NGINX 禁用录制。如果不包括此行,

				
 # NGINX 将会持续录制并将您的流永久保存到您的磁盘。

						record off;
				}
		}
}

通过设置防火墙来保护网络

您已经配置了 NGINX RTMP 服务器,但是您需要保护您的网络并控制流量。如何做到?通过设置防火墙,Uncomplicated Firewall(UFW),这是 Ubuntu 中的默认防火墙。

如果将NGINX RTMP服务器放在防火墙后,您需要允许NGINX RTMP服务器端口处于开放状态。由于您已配置NGINX RTMP服务器以侦听端口1935,因此您将允许通过防火墙的此端口。

1. 运行以下命令添加防火墙规则,打开防火墙上的1935端口。此防火墙规则允许所有传入和传出请求访问NGINX RTMP服务器端口1935

sudo ufw allow 1935/tcp
Opening Port 1935 on your firewall

2. 接下来,运行以下命令禁用然后重新启用防火墙。该命令基本上重新启动防火墙,以便对防火墙的任何更改生效。

sudo ufw disable && sudo ufw enable

3. 最后,运行以下命令检查防火墙的状态并验证端口1935是否可以从所有IP地址(任何地方)访问。

sudo ufw status
Checking if Port 1935 is Accessible from Anywhere

使用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库是一个压缩和解压库,用于加快音频和视频文件在互联网上传输的速度。
sudo apt install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev
Installing Required Dependencies

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

 sudo apt install ffmpeg -y 
Installing 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 -re -i "video.mp4" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://139.180.203.6:1935/live/streamname.flv 

如下所示,ffmpeg命令会打印出其检测到的每秒帧数比特率以及新创建的RTMP直播流的帧率

Viewing the RTMP Live Stream Data

结论

在本教程中,您学会了如何通过修改NGINX配置文件在NGINX RTMP服务器上设置并启用直播流。您还了解了如何使用FFmpeg工具通过NGINX RTMP服务器设置视频直播流。

您刚刚意识到,建立直播流不一定要花费您的每一分钱。此时,为什么不使用HTML5的<video>元素将您的流集成到您的网页中?或者为您的RTMP流设置OBS Studio呢?

Source:
https://adamtheautomator.com/nginx-rtmp/