mediasoup 學習筆記 【三】 Producer 資料生產者
好久沒沒有更新了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
相關文章
- Bullet 學習筆記之 BugList 生產日記筆記
- SAP ME學習筆記(六)搭建生產線筆記
- 《作為生產者的作者》筆記筆記
- C#多執行緒學習(三) 生產者和消費者C#執行緒
- 資料庫學習筆記資料庫筆記
- 電商大資料學習筆記:使用者畫像大資料筆記
- orientDB學習筆記(三)資料庫 構架設計筆記資料庫
- Python爬蟲學習筆記(三、儲存資料)Python爬蟲筆記
- React 學習筆記【三】React筆記
- goLang學習筆記(三)Golang筆記
- cmake 學習筆記(三)筆記
- 科三學習筆記筆記
- Java學習筆記三Java筆記
- Javascript 學習 筆記三JavaScript筆記
- unity學習筆記(三)Unity筆記
- PHP 資料加密 (學習筆記)PHP加密筆記
- MySQL資料庫學習筆記MySql資料庫筆記
- 大資料學習筆記(四)大資料筆記
- 大資料學習筆記(五)大資料筆記
- 大資料學習筆記(六)大資料筆記
- 資料結構學習筆記資料結構筆記
- AS 學習筆記 載入資料筆記
- kafka_2.11-0.10.2.1 的生產者 消費者的示例(new producer api)KafkaAPI
- JAVA中 XML與資料庫互轉 學習筆記三JavaXML資料庫筆記
- 資料庫mysql學習筆記記錄資料庫MySql筆記
- 代理者模式——學習筆記模式筆記
- Redis學習筆記(三) 字典Redis筆記
- TS學習筆記(三):類筆記
- ONNXRuntime學習筆記(三)筆記
- Python學習筆記(三)Python筆記
- android學習筆記三Android筆記
- Spss 學習筆記(三)SPSS筆記
- c++學習筆記(三)C++筆記
- CANopen學習筆記(三)NMT筆記
- 網易產品經理課程學習筆記—精益資料分析筆記
- Redis學習筆記(七) 資料庫Redis筆記資料庫
- 資料結構學習筆記--棧資料結構筆記
- 資料結構學習筆記1資料結構筆記