Mediasoup 雜談(待完善)

1. Mediasoup 基本組件框圖

2. Mediasoup 的初始化基本流程

1. 客戶端訪問 https://192.168.2.84:3000/?info=true , 返回初始化頁面 html

2. 這是一個新發起的請求 websocket
wss://192.168.2.84:4443/?roomId=7xexh3xi&peerId=za4svz6e
客戶端一個請求過來,首先根據 url 裏的 roomId 查找 Room,如果不存在 Room,則輪詢挑選一個 worker ,產生一個協議層面的 Room 以及通過 worker 產生一個 router ,
通過 router 產生一個與底層交互的 DirectTransport ,這個用來 js 與底層 worker 的信令或數據交互,然後創建一個上層的 Room 對象,包含這些新產生的對象

3. 客戶端首先獲取 getRouterRtpCapabilites

4. 客戶端產生一個 createWebRtcTransport 生產者 和一個 createWebRtcTransport 消費者

5. 客戶端然後執行加入 Room 的指令 join

6. 客戶端執行 connectWebRtcTransport 進行 ice 的相關動作,兩次一個生產者一個消費者

7. 客戶端執行產生 produce ,併爲 Room 的每個用戶創建相應的 consume ,後續通過 produce 上傳音視頻數據

 

3.  Producer 的簡單說明

每個 producer 分爲三個種類 :  all, audio & video ,根據產生 produce 的 json 字段 kind 指定,
同時也支持三種類型 type 的輸出,分別爲 none, simple, simulcast, svc, pipe,根據產生 producer 的 json 字段 encodings 進行判斷
當 encodings 列表個數爲 1 時,判斷 if (encoding.spatialLayers > 1 || encoding.temporalLayers > 1) 則爲 SVC,否則就爲 SIMPLE, 當
encodings 列表個數大於 1 時, 則 type 爲 SIMULCAST,如果 encodings 爲 0 時,則爲 NONE

4. 數據接收及轉發流程

UdpSocket ---> WebRtcTransport --- 根據 ssrc 獲取 producer ---> Producer ---> WebRtcTransport ---> Router --- 根據 producer 獲取 consumer ---> consumer (抖動緩衝) ---> WebRtcTransport

5. 題外話

新用戶加入到 Room 會爲當前 Room 內已經存在的每一個 producer 產生一個 consumer ,consumer 產生成功,把此 consumer 的信息通過上述通道,發送指令 newConsumer 到新用戶的客戶端上,這樣就建立了客戶端與服務器端的 consumer 的通道,而新用戶的每次創建一個 producer 就會爲當前 Room 的已經存在的用戶產生一個 consumer ,然後把此信息發送到已經存在的用戶客戶端上,這樣就爲已經存在的用戶建立 了consumer 的通道。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章