diff --git a/bigbluebutton-client/resources/prod/lib/bbb_webrtc_bridge_sip.js b/bigbluebutton-client/resources/prod/lib/bbb_webrtc_bridge_sip.js index c961a3be3319bf59d75df99a365223ca139ef6fc..a29923966fa58015032c35d3daa8f3e8c68d5696 100755 --- a/bigbluebutton-client/resources/prod/lib/bbb_webrtc_bridge_sip.js +++ b/bigbluebutton-client/resources/prod/lib/bbb_webrtc_bridge_sip.js @@ -129,6 +129,7 @@ function stopWebRTCAudioTestJoinConference(){ transferTimeout = setTimeout( function() { console.log("Call transfer failed. No response after 3 seconds"); webRTCCallback({'status': 'failed', 'errorcode': 1008}); + releaseUserMedia(); currentSession = null; if (userAgent != null) { var userAgentTemp = userAgent; @@ -287,7 +288,7 @@ function webrtc_call(username, voiceBridge, callback, isListenOnly) { } // if the user requests to proceed as listen only (does not require media) or media is already acquired, // proceed with making the call - if (isListenOnly || userMicMedia !== undefined) { + if (isListenOnly || userMicMedia != null) { makeCallFunc(); } else { callback({'status':'mediarequest'}); @@ -387,6 +388,7 @@ function make_call(username, voiceBridge, server, callback, recall, isListenOnly callTimeout = setTimeout(function() { console.log('Ten seconds without updates sending timeout code'); callback({'status':'failed', 'errorcode': 1006}); // Failure on call + releaseUserMedia(); currentSession = null; if (userAgent != null) { var userAgentTemp = userAgent; @@ -414,6 +416,7 @@ function make_call(username, voiceBridge, server, callback, recall, isListenOnly iceGatheringTimeout = setTimeout(function() { console.log('Thirty seconds without ICE gathering finishing'); callback({'status':'failed', 'errorcode': 1011}); // ICE Gathering Failed + releaseUserMedia(); currentSession = null; if (userAgent != null) { var userAgentTemp = userAgent; @@ -439,6 +442,7 @@ function make_call(username, voiceBridge, server, callback, recall, isListenOnly console.log('call failed with cause: '+ cause); if (currentSession) { + releaseUserMedia(); if (callActive === false) { callback({'status':'failed', 'errorcode': 1004, 'cause': cause}); // Failure on call currentSession = null; @@ -463,7 +467,7 @@ function make_call(username, voiceBridge, server, callback, recall, isListenOnly if (currentSession) { console.log('call ended ' + currentSession.endTime); - + releaseUserMedia(); if (callPurposefullyEnded === true) { callback({'status':'ended'}); } else { @@ -480,6 +484,7 @@ function make_call(username, voiceBridge, server, callback, recall, isListenOnly if (currentSession) { console.log('call canceled'); + releaseUserMedia(); clearTimeout(callTimeout); currentSession = null; } else { @@ -498,6 +503,7 @@ function make_call(username, voiceBridge, server, callback, recall, isListenOnly iceConnectedTimeout = setTimeout(function() { console.log('5 seconds without ICE finishing'); callback({'status':'failed', 'errorcode': 1010}); // ICE negotiation timeout + releaseUserMedia(); currentSession = null; if (userAgent != null) { var userAgentTemp = userAgent; @@ -511,6 +517,7 @@ function make_call(username, voiceBridge, server, callback, recall, isListenOnly currentSession.mediaHandler.on('iceConnectionFailed', function() { console.log('received ice negotiation failed'); callback({'status':'failed', 'errorcode': 1007}); // Failure on call + releaseUserMedia(); currentSession = null; clearTimeout(iceConnectedTimeout); if (userAgent != null) { @@ -564,6 +571,22 @@ function webrtc_hangup(callback) { } } +function releaseUserMedia() { + if (!!userMicMedia) { + console.log("Releasing media tracks"); + + userMicMedia.getAudioTracks().forEach(function(track) { + track.stop(); + }); + + userMicMedia.getVideoTracks().forEach(function(track) { + track.stop(); + }); + + userMicMedia = null; + } +} + function isWebRTCAvailable() { if (bowser.msedge) { return false;