FFmpeg開發筆記(四十)Nginx整合rtmp模組實現RTMP推拉流

aqi00發表於2024-07-21

《FFmpeg開發實戰:從零基礎到短影片上線》一書的“10.2.2 FFmpeg向網路推流”介紹了輕量級流媒體伺服器MediaMTX,雖然MediaMTX使用很簡單,可是不能滿足複雜的業務需求,故而實際應用中需要引入專業的流媒體伺服器。
nginx-rtmp是開源WEB伺服器Nginx可增強的第三方rtmp模組,該模組封裝了rtmp伺服器,可以提供簡單的rtmp流媒體伺服器功能。由於Nginx本身是個高效能的WEB伺服器,支援代理分發多種協議的資料,因此透過Nginx整合RTMP伺服器也是個可行的方案。Nginx預設沒開啟rtmp模組,需要在編譯nginx時新增rtmp模組,還要修改配置檔案才能開啟rtmp服務。
因為nginx+rtmp在Windows環境的編譯過程非常麻煩,不但要考慮各種依賴包的版本相容問題,還要注意MSYS與Visual Studio命令列的切換問題,所以這裡只講述如何在Linux環境給Ngixn整合rtmp模組,詳細的整合步驟說明如下。

一、準備Nginx和nginx-rtmp-module的原始碼

Nginx的官網地址是https://nginx.org/,下載頁面為https://nginx.org/en/download.html,最新版本為2024年4月釋出的nginx-1.26.0,該版本的原始碼包下載連結為https://nginx.org/download/nginx-1.26.0.tar.gz。
nginx-rtmp-module的原始碼託管地址是https://github.com/arut/nginx-rtmp-module,各版本的下載頁面為https://github.com/arut/nginx-rtmp-module/tags,最新版本為2024年4月釋出的nginx-rtmp-module-1.2.2,該版本的原始碼包下載連結為https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.2.tar.gz。
以上原始碼包下載完畢後,把它們上傳到Linux伺服器的/usr/local/src目錄下,後續將在該目錄解壓這些原始碼包。

二、編譯與安裝Nginx(包含整合rtmp模組)

登入Linux伺服器,依次執行下列的解壓命令,分別解壓nginx-rtmp-module、nginx等等的原始碼包。

cd /usr/local/src
tar zxvf nginx-rtmp-module-1.2.2.tar.gz
tar zxvf nginx-1.26.0.tar.gz

接著進入nginx原始碼目錄,執行以下命令配置nginx。

cd nginx-1.26.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=../nginx-rtmp-module-1.2.2

配置完畢,執行以下命令編譯nginx。

make -j4

編譯完畢,執行以下命令安裝nginx。

make install

三、啟動Nginx的RTMP服務

開啟nginx安裝路徑下的conf/nginx.conf,在檔案末尾新增下面的rtmp配置,指定rtmp協議監聽的埠號和服務名。

rtmp {
    server {
        # rtmp協議的埠號
        listen 1935;
        # rtmp協議的服務名
        application live {
            live on;
        }
    }
}

新增完畢,儲存nginx.conf並退出。然後執行下面命令啟動nginx。

cd /usr/local/nginx/sbin
./nginx

四、檢查nginx-rtmp是否正常執行

下面透過ffmpeg把影片檔案向rtmp服務推流,也就是透過下面命令向rtmp://127.0.0.1/live/test推流影片檔案。有關ffmpeg的詳細用法參見《FFmpeg開發實戰:從零基礎到短影片上線》一書,這裡不再贅述。

ffmpeg -re -stream_loop -1 -i "/usr/local/src/test/2018s.mp4" -vcodec h264 -f flv rtmp://127.0.0.1/live/test

然後啟動電腦上的流媒體播放器VLC media player,開啟網路串流“rtmp://xxx.xxx.xxx/live/test”,可見VLC media player正常播放來自rtmp連結的直播影片,說明nginx-rtmp服務正確實現了rtmp協議的流媒體傳輸功能。

更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短影片上線》一書。

相關文章