除了常見的圖文即時通訊,還有實時音影片通訊,比如一對一的音訊通話、一對一的視訊通話等等,此時可採用WebRTC技術,有關WebRTC的程式設計開發及其專案實戰參見《Android Studio開發實戰:從零基礎到App上線(第3版)》的第20章“20.2 給App整合WebRTC”。
但是一對多的線上直播採用WebRTC技術就不太合適了,因為WebRTC只管打洞把雙方的網路打通,不考慮綜合負載。一旦連線WebRTC的裝置多起來,整個WebRTC網路就會癱瘓。那麼一對多的線上直播就要考慮部署獨立的流媒體伺服器,透過專門的流媒體傳輸協議,處理媒體源的音影片格式轉換,以及音訊流和影片流的資料分發工作。更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短影片上線》一書。
一、常見的四種流媒體傳輸協議對比
常見的流媒體傳輸協議主要有下面四類:RTSP協議、RTMP協議、SRT協議和RIST協議,關於這四種協議的詳細說明參見之前的文章《利用RTMP協議構建電腦與手機的直播Demo》,這裡不再贅述。
總的來說,雖然SRT協議出現時間較晚,但是它的直播質量大大優於RTMP協議,今後必將成為國內直播領域主流的流媒體協議。下面就以SRT協議為例,介紹如何透過OBS Studio和SRT Streamer向流媒體伺服器做SRT直播推流。
二、電腦端透過OBS Studio進行SRT直播推流
首先啟動電腦上的流媒體伺服器MediaMTX,具體的操作步驟詳見《FFmpeg開發實戰:從零基礎到短影片上線》一書的“10.2 FFmpeg推流和拉流”,也可參考之前的文章《詳解MediaMTX的推拉流》。
接著啟動電腦上的直播錄製軟體OBS Studio,具體的操作步驟詳見之前的文章《結合OBS與MediaMTX實現SRT直播推流》。之後讓OBS Studio對MediaMTX的srt地址“srt://127.0.0.1:8890?streamid=publish:live”推流,推流過程的OBS Studio錄製介面如下圖所示。
然後啟動電腦上的流媒體播放器VLC media player,開啟網路串流“srt://127.0.0.1:8890?streamid=read:live”,此時VLC media player的影片播放介面如下圖所示。
結合OBS Studio的直播錄製畫面和VLC media player的直播觀看介面,可知透過OBS Studio成功實現了SRT協議的直播功能。
三、手機端透過SRT Streamer進行SRT直播推流
首先啟動雲服務上的流媒體伺服器SRS或者ZLMediaKit,在雲伺服器上部署和啟動SRS或者ZLMediaKit比較麻煩,三言兩語說不清楚。如果大家想弄明白如何在雲伺服器上操作SRS或者ZLMediaKit,可在京東自營購買《FFmpeg開發實戰:從零基礎到短影片上線》一書,聯絡作者諮詢這兩個流媒體伺服器在雲伺服器上的詳細執行過程。
接著啟動手機上的直播錄製軟體SRT Streamer,具體的操作步驟詳見之前的文章《使用SRT Streamer開啟APP直播推流》。SRT Streamer啟動後,點選螢幕下方的“Start Live”按鈕,讓SRT Streamer對ZLMediaKit的srt地址“srt://124.xxx.xxx.xxx:9000?streamid=#!::r=live/test,m=publish”推流,推流過程的SRT Streamer錄製介面如下圖所示。
觀察華為雲上的ZLMediaKit日誌如下,可見SRT Streamer正在向後端的流媒體伺服器推送直播流:
然後啟動電腦上的流媒體播放器VLC media player,開啟網路串流“srt://124.xxx.xxx.xxx:9000?streamid=#!::r=live/test,m=request”,此時VLC media player的影片播放介面如下圖所示。
觀察華為雲上的ZLMediaKit日誌如下,可見VLC media player正在從後端的流媒體伺服器拉取直播流:
結合SRT Streamer直播錄製畫面和VLC media player的直播觀看介面,可知透過SRT Streamer成功實現了SRT協議的直播功能。
更多詳細的FFmpeg開發知識參見