前面已經介紹過Producer,今天來聊下Consumer, 正式進入之前要說下,
Producer和Consumer這裡并不是指的使用者,同一個使用者即可以是建立消費者,又可以建立生産者,
舉個例子就那微信語音聊天,兩個人都可以說話同時也可以聽到對方說的話。
這裡是需要轉換下思路。
值得注意的另外一點,信令服務在整個官方demo中,隻承擔了資料的傳輸,跟transport也不要混淆,
整體流程、過程 (過程隻列舉重要的環節)
- (生産者方)用戶端初始化
- (生産者方)建立transport; createSendTransport 建立完并偵聽相關事件,其中 connect 和 produce 兩個事件 需要通過websocket 發送相關資料
- 上一篇 講的 produce()的時候會觸發 transport 的 produce事件,然後通過信令服務發送相關資料
- (消費者方)同樣上面步驟 createRecvTransport 事件偵聽 connect
- (信令服務)收到這connect 和 produce 建立通道以及服務端的mediasoup一些操作,同時也會把生産的資料轉發給消費方(這塊後面的文章再講)
- (消費者方)接收信令服務的資料,進行消費
完整過程,這裡寫的比較簡略,想要技術細節就需要分析代碼,
回歸本篇正題
其實就是上面第六步的操作,用戶端
信令伺服器收到生産者資料後需要找到對應的消費者,進行轉發資料
官網給出的代碼,不難看出其實很簡短明了,這裡我指出下
mySignaling.on('newConsumer', async (data) =>
{
const consumer = await transport.consume(
{
id : data.id,
producerId : data.producerId,
kind : data.kind,
rtpParameters : data.rtpParameters
});
// Render the remote video track into a HTML video element.
const { track } = consumer;
videoElem.srcObject = new MediaStream([ track ]);
});
- transport 其實就是 消費者通道 createRecvTransport()
- track 擷取到轉換程媒體資料消費
消費這塊其實沒有太多的難點,上一篇和這一篇都屬于用戶端的一些相關知識點,後面我有時間會陸續更新 服務端的相關處理流程。
碼字不易,感謝支援