如何為串流設置 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 RAM、2 CPU核心和20GB HDD。

這些值僅供參考。確切的值取決於您的實際流量需求。您的流量越大,您需要托管和流式傳輸直播視頻的服務器就越強大。在開發環境中,擁有2個CPU和2GB RAM的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 伺服器轉換為 RTMP 伺服器的 NGINX 模組。該模組使 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服務器,但您需要保護您的網絡並控制流量。如何做到?通過設置一個防火牆,即Ubuntu中的默認防火牆Uncomplicated Firewall(UFW)。

如果您將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將執行插值以增加採樣率。
  • 設置音頻通道為單通道(單聲道)(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 RTMP服務器並通過修改NGINX配置文件在您的服務器上啟用直播流。您還觸及了使用FFmpeg工具通過NGINX RTMP服務器設置視頻直播流。

您剛剛意識到設置直播流不必花費一分錢。此時,為什麼不 使用HTML5的<video>元素將您的流集成到您的網頁中。或者 為您的RTMP流設置OBS Studio

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