目錄
前言
正文
一、簡單介紹
二、關(guān)鍵特色
1. 超強(qiáng) SFU 功能
2. Node.js 模塊
3. 客戶端 SDK
三、架構(gòu)組成
1. 關(guān)鍵實(shí)例
2. 重要模塊
四、發(fā)展現(xiàn)狀
https://liuzhen.blog.csdn.net/article/details/115603863https://liuzhen.blog.csdn.net/article/details/115603863
前言
最近收看了一期微軟(中國)關(guān)于云原生、大數(shù)據(jù)、AI 領(lǐng)域的開源服務(wù)創(chuàng)新的線上圓桌論壇,感覺收獲頗豐。眾所周知,隨著云原生、大數(shù)據(jù)和 AI 領(lǐng)域的快速發(fā)展,各領(lǐng)域之間的技術(shù)融合和相互驅(qū)動也越來越明顯,開源服務(wù)無疑是其中最核心的組件。
正文
本次圓桌論壇邀請了三位技術(shù)大咖,其中一位是百家云集團(tuán)流媒體高級研發(fā)工程師 ,劉振老師。劉老師是一位優(yōu)秀的音視頻專家,在公司主要負(fù)責(zé)音視頻 QoE 相關(guān)的研發(fā)工作。他分享中介紹到了一個(gè)云原生應(yīng)用——開源流媒體服務(wù) MediaSoup ,今天主要就給大家科普一下 MediaSoup。
一、簡單介紹
Mediasoup 官網(wǎng)對其的定位和評價(jià)還是非常高的:Cutting Edge WebRTC Video Conferencing,意思是頂尖的 WebRTC 視頻會議產(chǎn)品。
官網(wǎng)地址:https://mediasoup.org/
倉庫地址:https://github.com/versatica
二、關(guān)鍵特色
1. 超強(qiáng) SFU 功能
憑借豐富的功能和靈活性,SFU 模式廣泛應(yīng)用在多方會議或者類似場景,正在逐步取代更加消耗資源的 MCU 模式。
2. Node.js 模塊
Mediasoup 并不是創(chuàng)建了一個(gè)固定的單體服務(wù),而是一個(gè) Node.js 模塊,可以集成到更大的應(yīng)用程序中,也可以獨(dú)立運(yùn)行,具備非常靈活的移植能力。
3. 客戶端 SDK
Mediasoup 還提供了強(qiáng)大的 JS SDK,通過統(tǒng)一的 API 接口可以在任意瀏覽器上非常簡單的構(gòu)建出視頻會議應(yīng)用。
三、架構(gòu)組成
Mediasoup 有一張非常經(jīng)典的架構(gòu)圖,如下圖所示:
1. 關(guān)鍵實(shí)例
上圖涉及了三個(gè)關(guān)鍵實(shí)例,分別是 Worker、Router、Transport。其中,一個(gè) Worker 代表一個(gè)運(yùn)行在單核 CPU 上并處理 Router 實(shí)例的 MediaSoup C++ 子進(jìn)程;Router 的作用是用于注入、選擇和轉(zhuǎn)發(fā)通過 Transport 實(shí)例創(chuàng)建的媒體流,包括音頻流、視頻流;Transport 是客戶端與 MediaSoup Router 連接的橋梁,并通過在其上創(chuàng)建的 Producer 和 Consumer 實(shí)例實(shí)現(xiàn)雙向媒體傳輸。
主要包括 4 種 Transport:WebRtcTransport、PlainRtpTransport、PipeTransport、DirectTransport。其中,WebRtcTransport 主要用于瀏覽器之間的或者瀏覽器與其他終端進(jìn)行通訊的,這種傳輸數(shù)據(jù)一般是進(jìn)行加密的,為了保證數(shù)據(jù)安全,它有很多安全機(jī)制,安全機(jī)制較為復(fù)雜;PlainRtpTransport 用于普通或者自定義的 RTP 數(shù)據(jù)傳輸;PipeTransport 用于不同 Worker 的 Router 之間的數(shù)據(jù)傳輸;DirectTransport 用于 JS 層與底層 Worker 之間的信令和數(shù)據(jù)交互。
2. 重要模塊
但是,這張圖主要描述了媒體數(shù)據(jù)在服務(wù)器側(cè)的流轉(zhuǎn)過程,沒有更好體現(xiàn)出 WebRTC C/S 架構(gòu)的特點(diǎn),因此,自己更喜歡網(wǎng)上的這張圖,它讓 PeerConnection 與 Consumer 和 Producer 的關(guān)系更加明確。
?在上圖中,每個(gè) WebRTC 客戶端 Client 都會創(chuàng)建兩個(gè) Peerconnection,分別用于發(fā)送和接受媒體流,發(fā)送 PC 用于發(fā)送 LocalStream,其中包含了本地的 VideoTrack 和 AudioTrack,接收 PC 用來接受來自其他 Client 的 RemoteStream。同時(shí),Room 會在流媒體服務(wù)器側(cè)為每個(gè) Client 創(chuàng)建一個(gè) Peer,Peer 管理兩個(gè) Transport 用于接受 Client 的媒體流和向 Client 發(fā)送媒體流。
接下來,介紹一下 Peer 的作用。Peer 為對應(yīng)的 Client 發(fā)送的 VideoTrack 和 AudioTrack 分別創(chuàng)建一個(gè) Producer(一共是2個(gè)),Peer 也會為 Client 接收的 VideoTrack 和 AudioTrack 分別創(chuàng)建一個(gè) Consumer(一共是2個(gè))。其中,Producer 將媒體數(shù)據(jù)發(fā)送給每一個(gè)訂閱者 Consumer,Consumer 表示一個(gè)被 MediaSoup Router 轉(zhuǎn)發(fā)到客戶端的音頻流或者視頻流。
下面再詳細(xì)的介紹一下 Consumer,Consumer 根據(jù)功能劃分可以分為四種,分別是 SimpleConsumer、PipeConsumer、SvcConsumer、SimulcastConsumer。其中,SimpleConsumer 是普通 RTP 數(shù)據(jù)的消費(fèi)者,是一種最簡單的 Consumer,音視頻和視頻流的都一樣,沒有類型區(qū)分;PipeConsumer 是不同 Worker 的 Router 之間的數(shù)據(jù)流轉(zhuǎn),表示接收或者消費(fèi)從另外一個(gè) Worker 中的 Router 傳過來的數(shù)據(jù);SvcConsumer 是處理和消費(fèi)多層數(shù)據(jù),傳輸時(shí)一般分為3層(核心層、拓展層、邊緣層);SimulcastConsumer 是處理大小流的媒體數(shù)據(jù)。
四、發(fā)展現(xiàn)狀
目前看來,MediaSoup 是一個(gè)很有前途的項(xiàng)目。最近幾年,使用 MediaSoup 的用戶數(shù)量正在快速增長,而且 Kurento 技術(shù)團(tuán)隊(duì)自己也開始使用 MediaSoup 代替自己原來的架構(gòu)方案,貌似也為我們指明了方向,哈哈,技術(shù)方案沒有絕對,具體因人而異,因公司而不同。通過對 MediaSoup 的了解,發(fā)現(xiàn)其設(shè)計(jì)巧妙,擴(kuò)展性強(qiáng),非常推薦大家把它作為云原生領(lǐng)域的流媒體服務(wù)器。文章來源:http://www.zghlxwxcb.cn/news/detail-408800.html
作者簡介:??大家好,我是 Data-Mining(liuzhen007),是一名典型的音視頻技術(shù)愛好者,前后就職于傳統(tǒng)廣電巨頭和音視頻互聯(lián)網(wǎng)公司,具有豐富的音視頻直播和點(diǎn)播相關(guān)經(jīng)驗(yàn),對 WebRTC、FFmpeg 和 Electron 有非常深入的了解。同時(shí)也是 CSDN 博客專家(博客之星)、華為云享專家(共創(chuàng)編輯、十佳博主)、51CTO社區(qū)編輯、InfoQ 簽約作者,歡迎關(guān)注我分享更多干貨!??文章來源地址http://www.zghlxwxcb.cn/news/detail-408800.html
到了這里,關(guān)于流媒體服務(wù)器(17)—— 流媒體開源服務(wù) MediaSoup 初識的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!