怎么做網(wǎng)站維護國外網(wǎng)站排名前十
《FFmpeg開發(fā)實戰(zhàn):從零基礎到短視頻上線》一書的“10.2 ?FFmpeg推流和拉流”提到直播行業(yè)存在RTSP和RTMP兩種常見的流媒體協(xié)議。除此以外,還有于2017年推出的SRT協(xié)議,相比常見的RTMP協(xié)議,SRT協(xié)議具有更低的延遲,并且消除了卡幀、抖動等花屏現(xiàn)象。騰訊視頻云已經(jīng)引入了SRT協(xié)議,在實踐中取得了良好的視頻直播效果。
FFmpeg從4.0開始支持集成第三方的libsrt庫,該庫為SRT協(xié)議的支持庫。OBS Studio、MediaMTX等開源軟件也紛紛支持SRT,國產(chǎn)的兩個開源流媒體服務器SRS和ZLMediaKit都支持SRT協(xié)議,可見在直播領域SRT取代RTMP已是大勢所趨。在本文的直播操作之前,務必確保電腦上的FFmpeg已經(jīng)集成了libsrt庫,詳細的集成步驟參見之前的文章《Windows環(huán)境給FFmpeg集成libsrt》。
下面就以Windows環(huán)境為例,把OBS Studio作為SRT直播的錄制推流方,把MediaMTX作為承載SRT直播的流媒體服務器,把ffplay和VLC media player作為SRT直播的拉流播放器,演示看看如何在個人電腦搭建一個從錄制到分發(fā)到播放的完整SRT直播系統(tǒng)。
首先按照《FFmpeg開發(fā)實戰(zhàn):從零基礎到短視頻上線》一書“10.2.2 ?FFmpeg向網(wǎng)絡推流”的介紹,安裝并啟動MediaMTX,彈出的MediaMTX日志窗口顯示內(nèi)容如下:
2023/12/10 14:18:25 INF MediaMTX v1.3.0
2023/12/10 14:18:25 INF configuration loaded from E:\Program Files (x86)\mediamtx\mediamtx.yml
2023/12/10 14:18:25 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2023/12/10 14:18:25 INF [RTMP] listener opened on :1935
2023/12/10 14:18:25 INF [HLS] listener opened on :8888
2023/12/10 14:18:25 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)
2023/12/10 14:18:25 INF [SRT] listener opened on :8890 (UDP)
從上面日志可見,MediaMTX提供的SRT服務正在監(jiān)聽8890端口,且該服務采用UDP傳輸層協(xié)議。此時SRT服務的訪問地址前綴為srt://127.0.0.1:8890?streamid=xxx,開頭的“srt://”表示該地址采用srt協(xié)議,后面的“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的服務日志如下所示:
2023/12/10 14:18:59 INF [SRT] [conn 127.0.0.1:50021] opened
2023/12/10 14:19:01 INF [SRT] [conn 127.0.0.1:50021] is publishing to path 'live', 2 tracks (H264, MPEG-4 Audio)
可見MediaMTX的SRT服務正在把推流方的音頻流和視頻流發(fā)布到live路徑。
然后按照《FFmpeg開發(fā)實戰(zhàn):從零基礎到短視頻上線》一書“1.3 ?Windows系統(tǒng)安裝FFmpeg”的介紹,在個人電腦上安裝FFmpeg并打開MSYS的命令行,運行下面的ffplay命令,期望從SRT地址拉流播放。
ffplay -i 'srt://127.0.0.1:8890?streamid=read:live'
此時ffplay彈出播放器窗口,正常播放視頻畫面和聲音。同時觀察MediaMTX的服務日志如下所示:
2023/12/10 14:19:40 INF [SRT] [conn 127.0.0.1:53466] opened
2023/12/10 14:19:40 INF [SRT] [conn 127.0.0.1:53466] is reading from path 'live', 2 tracks (H264, MPEG-4 Audio)
可見作為拉流方的ffplay正在從SRT服務的live路徑拉取音頻流和視頻流,說明MediaMTX通過SRT協(xié)議成功實現(xiàn)了視頻直播的SRT推拉流功能。
最后打開VLC media player,依次選擇菜單:“媒體”——“打開網(wǎng)絡串流”,在URL地址欄填入SRT服務的拉流鏈接“srt://127.0.0.1:8890?streamid=read:live”,單擊窗口右下角的播放按鈕,即可使用VLC media player播放SRT直播地址了。
更多詳細的FFmpeg開發(fā)知識參見《FFmpeg開發(fā)實戰(zhàn):從零基礎到短視頻上線》一書。
本系列的FFmpeg進階文章目錄為《FFmpeg開發(fā)筆記全目錄(FFmpeg開發(fā)實戰(zhàn)詳解,含直播系統(tǒng)的搭建過程)》