mediasoup 學習筆記 【三】 Producer 資料生產者

風不二發表於2020-12-03

好久沒沒有更新了mediasoup相關文章了,本來打算一次性整理完成,後來時間關係沒有整理完成再全部發出來。
這篇文章主要講下直播的時候主播通過什麼方式把把自己的視訊廣播出去用mediasoup-producer 生產者

官網給的案例

 const producer = await transport.produce(options)

options相關引數

  • track 音訊還是視訊 audio video 其實是 gettracks的值
  • rtpParameters rtp的相關引數,下面會提到是從哪裡獲取的
  • paused 暫停狀態
  • keyFrameRequestDelay 關鍵幀的延遲設定 0 就是沒有延遲
  • appData 業務自定義資料

這裡要注意 video 和 audio 是分開生產得

rtpParameters

rtp相關引數的獲取,rtp協議其實我也只是從網上搜了下,Real-time Transport Protocol 實時傳輸協議,這裡單純的還是從服務端獲取,
在官方的demo程式碼中會發現 getRouterRtpCapabilities
這裡只貼出一部分

  • server

case 'getRouterRtpCapabilities':
	{
		accept(this._mediasoupRouter.rtpCapabilities);
		break;
	}

  • client
routerRtpCapabilities = await this._protoo.request('getRouterRtpCapabilities');
await this._mediasoupDevice.load({ routerRtpCapabilities });

... 此處省略程式碼...

let stream = await navigator.mediaDevices.getUserMedia({
      audio: {
        volume: 0.5, // 音量,0靜音,1最大聲音
        sampleRate: 48000,// 取樣率
        sampleSize: 16, // 取樣大小(每一個樣用多少位表示)
        echoCancellation: true, // 是否開啟迴音消除
        autoGainControl: false, // 是否開啟自動增益,也就是在原有錄製的聲音的基礎上是否增加音量
        noiseSuppression: true, // 是否開啟降噪
        latency: 0.2, // 延遲大小,在直播過程中latency設定的越小實時性會越好,但是網路不好時容易出現卡頓;設定的越大流暢度越好,但是設定太大會有明顯的延遲。一般設定500ms,設定為200ms實時效果就很好了,大於500ms就能明顯感覺到延遲了。
        channelCount: 2, // 聲道數,一般設定單聲道就夠了
        deviceId: device.value, // 音訊裝置deviceID
        groupId: undefined, // 音訊裝置groupID
      }
    });
 const audioTracks = stream.getAudioTracks();
 track = audioTracks[0];


await _sendTransport.produce({track})

然後根據生產的資料、通過信令廣播出去 
 this._sendTransport.on('produce', async (first, callback, errback) => {
      let { kind, rtpParameters, appData } = first;
      try {
        let produceItem = await this._protoo.request('produce', { transportId: this._sendTransport.id, kind, rtpParameters, appData });
        callback({ id: produceItem.id });
      } catch (error) {
        errback(error);
      }
    });

到這裡就已經生產資料已經完成了,
其實官方的文件,有些和demo裡面不太一致,兩者需要結合著看,畢竟這麼大的系統。

後續會更新 消費者根據接收到的資料,怎麼同步播放出來。

參考文章

https://www.cnblogs.com/lidabo/p/7217549.html

相關文章