天天看點

mediasoupClient 學習筆記 【四】 Consumer 資料消費者

前面已經介紹過Producer,今天來聊下Consumer, 正式進入之前要說下,

Producer和Consumer這裡并不是指的使用者,同一個使用者即可以是建立消費者,又可以建立生産者,

舉個例子就那微信語音聊天,兩個人都可以說話同時也可以聽到對方說的話。

這裡是需要轉換下思路。

值得注意的另外一點,信令服務在整個官方demo中,隻承擔了資料的傳輸,跟transport也不要混淆,

整體流程、過程 (過程隻列舉重要的環節)

  1. (生産者方)用戶端初始化
  2. (生産者方)建立transport; createSendTransport 建立完并偵聽相關事件,其中 connect 和 produce 兩個事件 需要通過websocket 發送相關資料
  3. 上一篇 講的 produce()的時候會觸發 transport 的 produce事件,然後通過信令服務發送相關資料
  4. (消費者方)同樣上面步驟 createRecvTransport 事件偵聽 connect
  5. (信令服務)收到這connect 和 produce 建立通道以及服務端的mediasoup一些操作,同時也會把生産的資料轉發給消費方(這塊後面的文章再講)
  6. (消費者方)接收信令服務的資料,進行消費

完整過程,這裡寫的比較簡略,想要技術細節就需要分析代碼,

回歸本篇正題

其實就是上面第六步的操作,用戶端

信令伺服器收到生産者資料後需要找到對應的消費者,進行轉發資料

官網給出的代碼,不難看出其實很簡短明了,這裡我指出下

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 擷取到轉換程媒體資料消費

消費這塊其實沒有太多的難點,上一篇和這一篇都屬于用戶端的一些相關知識點,後面我有時間會陸續更新 服務端的相關處理流程。

碼字不易,感謝支援

繼續閱讀