diff --git a/labs/bbb-webrtc-sfu/lib/video/VideoManager.js b/labs/bbb-webrtc-sfu/lib/video/VideoManager.js index 7796972786f18ac247d14f751ab5a85ac235ec05..722cf5acd3450cf2598b8228931fd822a9f5767a 100755 --- a/labs/bbb-webrtc-sfu/lib/video/VideoManager.js +++ b/labs/bbb-webrtc-sfu/lib/video/VideoManager.js @@ -31,35 +31,34 @@ var _onMessage = function (_message) { let role = message.role? message.role : 'any'; let cameraId = message.cameraId; let shared = false; - let iceQueue = {}; + let iceQueues = {}; + let iceQueue; - if (message.role == 'share') { + if (typeof message.cameraId === 'undefined' || !message.cameraId) { + console.log(" [VideoManager] Undefined message.cameraId for session ", sessionId); + return; + } + + if (message.role === 'share') { shared = true; + cameraId += '-shared'; } if (!sessions[sessionId]) { sessions[sessionId] = {}; } - switch (role) { - case 'share': - if (message.cameraId && typeof sessions[sessionId][message.cameraId+'-shared'] !== 'undefined' && sessions[sessionId][message.cameraId+'-shared']) { - video = sessions[sessionId][message.cameraId+'-shared']; - } - break; - case 'viewer': - if (message.cameraId && sessions[sessionId][message.cameraId]) { - video = sessions[sessionId][message.cameraId]; - } - case 'any': - if (message.cameraId && typeof sessions[sessionId][message.cameraId+'-shared'] !== 'undefined' && sessions[sessionId][message.cameraId+'-shared']) { - video = sessions[sessionId][message.cameraId+'-shared']; - } - else if (message.cameraId && sessions[sessionId][message.cameraId]) { - video = sessions[sessionId][message.cameraId]; - } + if (!iceQueues[sessionId]) { + iceQueues[sessionId] = {}; + } - break; + if (typeof sessions[sessionId][cameraId] !== 'undefined' && sessions[sessionId][cameraId]) { + video = sessions[sessionId][cameraId]; + } + + if (typeof iceQueues[sessionId][cameraId] !== 'undefined' && + iceQueues[sessionId][cameraId]) { + iceQueue = iceQueues[sessionId][cameraId] ; } switch (message.id) { @@ -69,22 +68,14 @@ var _onMessage = function (_message) { video = new Video(bbbGW, message.cameraId, shared, message.connectionId); // Empty ice queue after starting video - if (iceQueue[message.cameraId]) { + if (iceQueue) { let candidate; - while(candidate = iceQueue[message.cameraId].pop()) { + while(candidate = iceQueue.pop()) { video.onIceCandidate(cand); } } - switch (role) { - case 'share': - sessions[sessionId][message.cameraId+'-shared']= video; - break; - case 'viewer': - sessions[sessionId][message.cameraId] = video; - break; - default: console.log(" [VideoManager] Unknown role? ", role); - } + sessions[sessionId][cameraId] = video; video.start(message.sdpOffer, (error, sdpAnswer) => { if (error) { @@ -115,7 +106,7 @@ var _onMessage = function (_message) { console.log('[' + message.id + '] connection ' + sessionId + " with message => " + JSON.stringify(message, null, 2)); if (video) { - stopVideo(sessionId, role, cameraId); + stopVideo(sessionId, role, message.cameraId); } else { console.log(" [stop] Why is there no video on STOP?"); } @@ -126,12 +117,13 @@ var _onMessage = function (_message) { if (video) { video.onIceCandidate(message.candidate); } else { - console.log(" [iceCandidate] Queueing ice candidate for later in video " + message.cameraId); - - if (!iceQueue[message.cameraId]) { - iceQueue[message.cameraId] = []; + console.log(" [iceCandidate] Queueing ice candidate for later in video " + cameraId); + if (typeof iceQueue === 'undefined' || !iceQueue) { + iceQueues[sessionId][cameraId] = []; + iceQueue = iceQueues[sessionId][cameraId]; } - iceQueue[message.cameraId].push(message.candidate); + + iceQueue.push(message.candidate); } break; diff --git a/labs/bbb-webrtc-sfu/lib/video/video.js b/labs/bbb-webrtc-sfu/lib/video/video.js index b99077321b18855d86db5ecc5301aa09af7cc744..48b3f1577b6c02c65faa7deaa63a8f665c6e9e8b 100644 --- a/labs/bbb-webrtc-sfu/lib/video/video.js +++ b/labs/bbb-webrtc-sfu/lib/video/video.js @@ -23,6 +23,7 @@ module.exports = class Video { this.role = this.shared? 'share' : 'view' this.webRtcEndpoint = null; this.mediaId = null; + this.iceQueue = null; this.candidatesQueue = []; }