diff --git a/app/src/Peer.js b/app/src/Peer.js index 42414eee..a0acfa45 100644 --- a/app/src/Peer.js +++ b/app/src/Peer.js @@ -93,6 +93,12 @@ module.exports = class Peer { log.debug('Producer ----->', { type: producer.type }); + if (['simulcast', 'svc'].includes(producer.type)) { + log.debug('Producer scalabilityMode ----->', { + scalabilityMode: producer.rtpParameters.encodings[0].scalabilityMode, + }); + } + producer.on( 'transportclose', function () { @@ -140,14 +146,29 @@ module.exports = class Peer { // https://www.w3.org/TR/webrtc-svc/ - if (consumer.type === 'simulcast') { - await consumer.setPreferredLayers({ - spatialLayer: 3, - temporalLayer: 3, - }); - log.debug('Consumer scalabilityMode ----->', { - scalabilityMode: consumer.rtpParameters.encodings[0].scalabilityMode, - }); + switch (consumer.type) { + case 'simulcast': + // L1T3/L2T3/L3T3 + await consumer.setPreferredLayers({ + spatialLayer: 3, // 1 2 3 + temporalLayer: 3, + }); + log.debug('Consumer scalabilityMode ----->', { + scalabilityMode: consumer.rtpParameters.encodings[0].scalabilityMode, + }); + break; + case 'svc': + // L3T3 + await consumer.setPreferredLayers({ + spatialLayer: 3, + temporalLayer: 3, + }); + log.debug('Consumer scalabilityMode ----->', { + scalabilityMode: consumer.rtpParameters.encodings[0].scalabilityMode, + }); + break; + default: + break; } this.consumers.set(consumer.id, consumer); diff --git a/app/src/config.template.js b/app/src/config.template.js index 1988fb07..4e37b9ad 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -72,7 +72,7 @@ module.exports = { rtcMinPort: 40000, rtcMaxPort: 40100, logLevel: 'error', - logTags: ['info', 'ice', 'dtls', 'rtp', 'srtp', 'rtcp'], + logTags: ['info', 'ice', 'dtls', 'rtp', 'srtp', 'rtcp', 'rtx', 'bwe', 'score', 'simulcast', 'svc', 'sctp'], }, // Router settings router: { diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index 8bd79f47..7cf0d808 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -197,6 +197,9 @@ class RoomClient { this.producerLabel = new Map(); this.eventListeners = new Map(); + this.debug = false; + this.debug ? window.localStorage.setItem('debug', 'mediasoup*') : window.localStorage.removeItem('debug'); + console.log('06 ----> Load Mediasoup Client v', mediasoupClient.version); console.log('06.1 ----> PEER_ID', this.peer_id); @@ -701,7 +704,8 @@ class RoomClient { let videoPrivacyBtn = this.getId(this.peer_id + '__vp'); if (videoPrivacyBtn) videoPrivacyBtn.style.display = screen ? 'none' : 'inline'; - console.log(`Media contraints ${type}:`, mediaConstraints); + console.log(`Media constraints ${type}:`, mediaConstraints); + let stream; try { stream = screen @@ -735,10 +739,10 @@ class RoomClient { const { encodings, codec } = this.getWebCamEncoding(); console.log('GET WEBCAM ENCODING', { encodings: encodings, - codec: codec, + codecs: codec, }); params.encodings = encodings; - params.codec = codec; + params.codecs = codec; params.codecOptions = { videoGoogleStartBitrate: 1000, }; @@ -748,16 +752,16 @@ class RoomClient { const { encodings, codec } = this.getScreenEncoding(); console.log('GET SCREEN ENCODING', { encodings: encodings, - codec: codec, + codecs: codec, }); params.encodings = encodings; - params.codec = codec; + params.codecs = codec; params.codecOptions = { videoGoogleStartBitrate: 1000, }; } - console.log('PARAMS', params); + console.log('PRODUCER PARAMS', params); producer = await this.producerTransport.produce(params); @@ -1119,7 +1123,7 @@ class RoomClient { }, ]; } else { - console.log('WEBCAM ENCODING: VP8 or H264 with simulcast.'); + console.log('WEBCAM ENCODING: VP8 or H264 with simulcast'); encodings = [ { scaleResolutionDownBy: 1,