diff --git a/src/components/CallView/CallView.vue b/src/components/CallView/CallView.vue index 4e252472dd6..394c0fa62d7 100644 --- a/src/components/CallView/CallView.vue +++ b/src/components/CallView/CallView.vue @@ -781,12 +781,14 @@ export default { }, adjustSimulcastQualityForParticipant(callParticipantModel) { + // Always use the high temporal layer, as a low frame rate can look + // bad specially with a low number of participants. if (this.isGrid) { - callParticipantModel.setSimulcastVideoQuality(SIMULCAST.MEDIUM) + callParticipantModel.setSimulcastVideoQuality(SIMULCAST.MEDIUM, SIMULCAST.HIGH) } else if (this.sharedDatas[callParticipantModel.attributes.peerId].promoted || this.selectedVideoPeerId === callParticipantModel.attributes.peerId) { - callParticipantModel.setSimulcastVideoQuality(SIMULCAST.HIGH) + callParticipantModel.setSimulcastVideoQuality(SIMULCAST.HIGH, SIMULCAST.HIGH) } else { - callParticipantModel.setSimulcastVideoQuality(SIMULCAST.LOW) + callParticipantModel.setSimulcastVideoQuality(SIMULCAST.LOW, SIMULCAST.HIGH) } }, diff --git a/src/utils/webrtc/models/CallParticipantModel.js b/src/utils/webrtc/models/CallParticipantModel.js index 258222fab59..c6bb0307a64 100644 --- a/src/utils/webrtc/models/CallParticipantModel.js +++ b/src/utils/webrtc/models/CallParticipantModel.js @@ -253,7 +253,7 @@ CallParticipantModel.prototype = { // Set expected state in Peer object. if (this._simulcastVideoQuality !== undefined) { - this.setSimulcastVideoQuality(this._simulcastVideoQuality) + this.setSimulcastVideoQuality(this._simulcastVideoQuality.spatial, this._simulcastVideoQuality.temporal) } if (this._videoBlocked !== undefined) { this.setVideoBlocked(this._videoBlocked) @@ -378,16 +378,18 @@ CallParticipantModel.prototype = { this.set('videoBlocked', remoteVideoBlocked) }, - setSimulcastVideoQuality(simulcastVideoQuality) { + setSimulcastVideoQuality(simulcastVideoQualitySpatial, simulcastVideoQualityTemporal) { // Store value to be able to apply it again if a new Peer object is set. - this._simulcastVideoQuality = simulcastVideoQuality + this._simulcastVideoQuality = { + spatial: simulcastVideoQualitySpatial, + temporal: simulcastVideoQualityTemporal, + } if (!this.get('peer') || !this.get('peer').enableSimulcast) { return } - // Use same quality for simulcast and temporal layer. - this.get('peer').selectSimulcastStream(simulcastVideoQuality, simulcastVideoQuality) + this.get('peer').selectSimulcastStream(simulcastVideoQualitySpatial, simulcastVideoQualityTemporal) }, setSimulcastScreenQuality(simulcastScreenQuality) {