From dcddf8e2aca6a7165bd9bfce575d480a64253afb Mon Sep 17 00:00:00 2001 From: Yohan Totting Date: Wed, 3 Apr 2024 12:06:22 +0700 Subject: [PATCH] feat: add bitrates config for webcam and screenshare and adjust the default sendEncoding to VP9 bitrate (#104) * add bitrates config based on video type --------- Co-authored-by: Yohan Totting Co-authored-by: Faiq Naufal <43695578+faiq-naufal@users.noreply.github.com> --- packages/room/config/config.js | 10 ++++++++++ packages/room/peer/peer.js | 23 ++++++++++------------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/packages/room/config/config.js b/packages/room/config/config.js index 627f080b..ea50233c 100644 --- a/packages/room/config/config.js +++ b/packages/room/config/config.js @@ -26,6 +26,11 @@ export const media = { simulcast: false, svc: true, scalabilityMode: 'L3T1', + bitrates: { + high: 700 * 1000, + mid: 300 * 1000, + low: 100 * 1000, + }, }, screen: { maxFramerate: 30, @@ -33,6 +38,11 @@ export const media = { simulcast: false, svc: true, scalabilityMode: 'L1T2', + bitrates: { + high: 1200 * 1000, + mid: 500 * 1000, + low: 150 * 1000, + }, }, microphone: { audioCodecs: ['audio/red', 'audio/opus'], diff --git a/packages/room/peer/peer.js b/packages/room/peer/peer.js index e1b60e21..07ef3272 100644 --- a/packages/room/peer/peer.js +++ b/packages/room/peer/peer.js @@ -24,12 +24,6 @@ export const createPeer = ({ api, createStream, event, streams, config }) => { _bwController /** @type {VideoObserver | null} */ _videoObserver - /** @type {number} */ - _highBitrate - /** @type {number} */ - _midBitrate - /** @type {number} */ - _lowBitrate /** @type {Array} */ _pendingObservedVideo /** @type {Array} */ @@ -50,9 +44,6 @@ export const createPeer = ({ api, createStream, event, streams, config }) => { }) this._videoObserver = null - this._highBitrate = 1200 * 1000 - this._midBitrate = 500 * 1000 - this._lowBitrate = 150 * 1000 this._pendingObservedVideo = [] this._pendingIceCandidates = [] /** @@ -557,6 +548,12 @@ export const createPeer = ({ api, createStream, event, streams, config }) => { const transceiverInit = { direction: 'sendonly', streams: [stream.mediaStream], + sendEncodings: [ + { + maxBitrate: config.media[type].bitrates.high, + maxFramerate: config.media[type].maxFramerate, + }, + ], } const svcEnabled = config.media[type].svc && browserName !== FIREFOX @@ -569,21 +566,21 @@ export const createPeer = ({ api, createStream, event, streams, config }) => { { rid: 'high', maxFramerate: config.media[type].maxFramerate, - maxBitrate: this._highBitrate, + maxBitrate: config.media[type].bitrates.high, }, { rid: 'mid', // eslint-disable-next-line unicorn/no-zero-fractions scaleResolutionDownBy: 2.0, maxFramerate: config.media[type].maxFramerate, - maxBitrate: this._midBitrate, + maxBitrate: config.media[type].bitrates.mid, }, { rid: 'low', // eslint-disable-next-line unicorn/no-zero-fractions scaleResolutionDownBy: 4.0, maxFramerate: config.media[type].maxFramerate, - maxBitrate: this._lowBitrate, + maxBitrate: config.media[type].bitrates.low, }, ] @@ -606,7 +603,7 @@ export const createPeer = ({ api, createStream, event, streams, config }) => { transceiverInit.sendEncodings = sendEncodings } else { const sendEncodings = { - maxBitrate: this._highBitrate, + maxBitrate: config.media[type].bitrates.high, scalabilityMode: config.media[type].scalabilityMode, maxFramerate: config.media[type].maxFramerate, }