FFmpeg開發筆記(二十六)Linux環境安裝ZLMediaKit實現影片推流

aqi00發表於2024-06-02
《FFmpeg開發實戰:從零基礎到短影片上線》一書在第10章介紹了輕量級流媒體伺服器MediaMTX,透過該工具可以測試RTSP/RTMP等流媒體協議的推拉流。不過MediaMTX的功能實在是太簡單了,無法應用於真實直播的生產環境,真正能用於生產環境的流媒體伺服器還要看SRS或者ZLMediaKit。

ZLMediaKit是一款國產的開源流媒體伺服器,它基於C++11開發,支援多種流媒體協議(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC),支援的音影片編碼標準包括H265、H264、AAC、G711、OPUS等。
透過結合FFmpeg與ZLMediaKit,可以很方便地測試音影片的推拉流。接下來以華為的尤拉系統為執行環境,介紹如何編譯、安裝、除錯ZLMediaKit,詳細的操作步驟說明如下。

一、編譯安裝ZLMediaKit

1、登入Linux伺服器(比如華為雲的尤拉系統),執行下列命令安裝ZLMediaKit的依賴包。

yum install git
yum install openssl
yum install libsrtp

2、執行下面命令從gitee下載ZLMediaKit的原始碼。

cd /usr/local/src
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit

3、進入ZLMediaKit的原始碼目錄,執行下面命令更新ZLMediaKit的依賴模組原始碼。

cd ZLMediaKit
git submodule update --init

4、依次執行下面命令配置ZLMediaKit。

mkdir build
cd build
cmake .. -DENABLE_WEBRTC=on

5、執行下面命令編譯ZLMediaKit。

make

6、編譯完成後,執行下面命令安裝ZLMediaKit。

make install

命令執行完畢,ZLMediaKit的可執行程式將安裝到ZLMediaKit原始碼路徑的release/linux/Debug目錄下。

二、編譯安裝FFmpeg

在Linux系統編譯安裝FFmpeg的詳細步驟參見《FFmpeg開發實戰:從零基礎到短影片上線》一書的“1.2 Linux系統安裝FFmpeg”,這裡不再贅述。

三、啟動ZLMediaKit

1、進入ZLMediaKit的安裝目錄:

cd /usr/local/src/ZLMediaKit/release/linux/Debug

2、開啟配置檔案config.ini,把http標籤下的sslport值改為8443,如下所示。

sslport=8443

把http標籤下的port值改為8080,如下所示。

port=8080

修改完畢,儲存並退出config.ini。
3、執行下面命令,啟動MediaServer服務。

./MediaServer -d &

若想啟用安全協議SSL,則執行下面命令,啟動帶預設https證書的MediaServer服務。

./MediaServer -d -s ./default.pem &

4、檢查伺服器是否開啟了下列埠:
554埠,用於rtsp協議,訪問“rtsp://”開頭的直播地址需要。
1935埠,用於rtmp協議,訪問“rtmp://”開頭的直播地址需要。
8080埠,用於http協議,訪問“http://”開頭的直播地址需要。
8443埠,用於https協議,訪問“https://”開頭的直播地址需要。

四、檢查ZLMediaKit的影片推拉流

影片推流有RTSP和RTMP兩種常見的流媒體協議。其中RTSP全稱為“Real Time Streaming Protocol”(實時流傳輸協議),它由RealNetworks和網景公司共同提交。RTSP協議支援雙向傳輸,允許伺服器端和客戶端之間實時通訊,常用於需要播放、暫停、快進、快退等控制操作的影片點播場合。
RTMP全稱為“RTMP Real Time Messaging Protocol”(實時訊息傳輸協議),它由Adobe公司提交。RTMP協議只支援單向傳輸,只允許從伺服器端傳輸資訊到客戶端,常用於實時性較強的影片直播,比如帶貨直播、視訊會議、線上課堂等場合。
下面透過ffmpeg把影片源推流給ZLMediaKit,並使用VLC播放器觀察影片拉流效果。
1、執行以下命令,將本地影片透過RTSP協議推流給ZLMediaKit。

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

若想將本地影片透過RTMP協議推流給ZLMediaKit,則需執行以下命令。

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

2、開啟VLC播放器,依次選擇選單“媒體”→“開啟網路串流”,在網路URL框中輸入下列任一地址,觀看能否正常播放影片畫面。

rtsp://124.***.***.***/live/test
rtmp://124.***.***.***/live/test
http://124.***.***.***:8080/live/test/hls.m3u8
http://124.***.***.***:8080/live/test.live.ts
http://124.***.***.***:8080/live/test.live.mp4
http://124.***.***.***:8080/live/test.live.flv

注意需要把上述地址中的“124.***.***.***”替換為流媒體伺服器實際的公網地址。

相關文章