FFmpeg從4.0開始支援整合第三方的libsrt庫,該庫為SRT協議的支援庫。OBS Studio、MediaMTX等開源軟體也紛紛支援SRT,國產的兩個開源流媒體伺服器SRS和ZLMediaKit都支援SRT協議,可見在直播領域SRT取代RTMP已是大勢所趨。在本文的直播操作之前,務必確保電腦上的FFmpeg已經整合了libsrt庫,詳細的整合步驟參見之前的文章《Windows環境給FFmpeg整合libsrt》。
下面就以Windows環境為例,把OBS Studio作為SRT直播的錄製推流方,把MediaMTX作為承載SRT直播的流媒體伺服器,把ffplay和VLC media player作為SRT直播的拉流播放器,演示看看如何在個人電腦搭建一個從錄製到分發到播放的完整SRT直播系統。
首先按照《FFmpeg開發實戰:從零基礎到短影片上線》一書“10.2.2 FFmpeg向網路推流”的介紹,安裝並啟動MediaMTX,彈出的MediaMTX日誌視窗顯示內容如下:
從上面日誌可見,MediaMTX提供的SRT服務正在監聽8890埠,且該服務採用UDP傳輸層協議。此時SRT服務的訪問地址字首為srt://127.0.0.1:8890?streamid=xxx,開頭的“srt://”表示該地址採用srt協議,後面的“127.0.0.1:8890”為SRT服務的IP和埠號。再後面的“?streamid=xxx”表示SRT服務的流名稱,其中xxx為形如“action:path”格式的字串,冒號前面的action有兩個取值,為publish表示推流方,為read表示拉流方;冒號後面的path表示播放地址的路徑名稱。
接著啟動OBS Studio,單擊主介面右下角的“設定”按鈕,彈出的設定視窗在左邊列表選擇“直播”,視窗右邊的“服務”欄選擇“自定義”,“伺服器”欄填“srt://127.0.0.1:8890?streamid=publish:live”,如下圖所示:
設定好SRT伺服器地址後,按照之前文章《使用OBS Studio開啟RTMP直播推流》的說明,讓OBS Studio開啟影片直播推流,觀察MediaMTX的服務日誌如下所示:
可見MediaMTX的SRT服務正在把推流方的音訊流和影片流釋出到live路徑。
然後按照《FFmpeg開發實戰:從零基礎到短影片上線》一書“1.3 Windows系統安裝FFmpeg”的介紹,在個人電腦上安裝FFmpeg並開啟MSYS的命令列,執行下面的ffplay命令,期望從SRT地址拉流播放。
此時ffplay彈出播放器視窗,正常播放影片畫面和聲音。同時觀察MediaMTX的服務日誌如下所示:
可見作為拉流方的ffplay正在從SRT服務的live路徑拉取音訊流和影片流,說明MediaMTX透過SRT協議成功實現了影片直播的SRT推拉流功能。
最後開啟VLC media player,依次選擇選單:“媒體”——“開啟網路串流”,在URL位址列填入SRT服務的拉流連結“srt://127.0.0.1:8890?streamid=read:live”,單擊視窗右下角的播放按鈕,即可使用VLC media player播放SRT直播地址了。
更多詳細的FFmpeg開發知識參見