From 375ce0f0f0f2e3b51d96aff52ef362ddbf97a583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= Date: Wed, 3 Jun 2020 19:28:42 +0200 Subject: [PATCH 1/2] Remove redundant call MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a peer is ended it is automatically removed from the list of peers, so it does not need to be explicitly done. Signed-off-by: Daniel Calviño Sánchez --- src/utils/webrtc/webrtc.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/utils/webrtc/webrtc.js b/src/utils/webrtc/webrtc.js index 7b91e08d0a..2b70547bf8 100644 --- a/src/utils/webrtc/webrtc.js +++ b/src/utils/webrtc/webrtc.js @@ -129,7 +129,6 @@ function checkStartPublishOwnPeer(signaling) { } if (ownPeer) { - webrtc.removePeers(ownPeer.id) ownPeer.end() } @@ -735,7 +734,6 @@ export default function initWebRtc(signaling, _callParticipantCollection, _local const forceReconnect = function(signaling, flags) { if (ownPeer) { - webrtc.removePeers(ownPeer.id) ownPeer.end() ownPeer = null @@ -1341,7 +1339,6 @@ export default function initWebRtc(signaling, _callParticipantCollection, _local webrtc.on('disconnected', function() { if (ownPeer) { - webrtc.removePeers(ownPeer.id) ownPeer.end() ownPeer = null From 0f3e1bddeb73caf20ef27f7dce78fe7c35fbb1c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= Date: Wed, 3 Jun 2020 19:29:56 +0200 Subject: [PATCH 2/2] Send offer again when own peer is not initially connected MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel Calviño Sánchez --- src/utils/webrtc/webrtc.js | 75 ++++++++++++++++++++++++++++++-------- 1 file changed, 60 insertions(+), 15 deletions(-) diff --git a/src/utils/webrtc/webrtc.js b/src/utils/webrtc/webrtc.js index 2b70547bf8..ebeaab51e1 100644 --- a/src/utils/webrtc/webrtc.js +++ b/src/utils/webrtc/webrtc.js @@ -129,25 +129,49 @@ function checkStartPublishOwnPeer(signaling) { } if (ownPeer) { + if (delayedConnectionToPeer[ownPeer.id]) { + clearInterval(delayedConnectionToPeer[ownPeer.id]) + delete delayedConnectionToPeer[ownPeer.id] + } ownPeer.end() + + // The peer does not need to be nullified in the + // localCallParticipantModel as a new peer will be immediately set by + // createPeer() below. } - // Create own publishing stream. - ownPeer = webrtc.webrtc.createPeer({ - id: currentSessionId, - type: 'video', - enableDataChannels: true, - enableSimulcast: signaling.hasFeature('simulcast'), - receiveMedia: { - offerToReceiveAudio: 0, - offerToReceiveVideo: 0, - }, - sendVideoIfAvailable: signaling.getSendVideoIfAvailable(), - }) - webrtc.emit('createdPeer', ownPeer) - ownPeer.start() + const createPeer = function() { + // Create own publishing stream. + ownPeer = webrtc.webrtc.createPeer({ + id: currentSessionId, + type: 'video', + enableDataChannels: true, + enableSimulcast: signaling.hasFeature('simulcast'), + receiveMedia: { + offerToReceiveAudio: 0, + offerToReceiveVideo: 0, + }, + sendVideoIfAvailable: signaling.getSendVideoIfAvailable(), + }) + webrtc.emit('createdPeer', ownPeer) + ownPeer.start() - localCallParticipantModel.setPeer(ownPeer) + localCallParticipantModel.setPeer(ownPeer) + } + + createPeer() + + delayedConnectionToPeer[ownPeer.id] = setInterval(function() { + // New offers are periodically sent until a connection is established. + // As an offer can not be sent again from an existing peer it must be + // removed and a new one must be created from scratch. + if (ownPeer) { + ownPeer.end() + } + + console.debug('No answer received for own peer, sending offer again') + createPeer() + }, 10000) } function sendCurrentMediaState() { @@ -477,6 +501,18 @@ export default function initWebRtc(signaling, _callParticipantCollection, _local clearErrorNotification() Sounds.playLeave(true) + + // The delayed connection for the own peer needs to be explicitly + // stopped, as the current own session is not passed along with the + // sessions of the other participants as "disconnected" to + // "usersChanged" when a call is left. + // The peer, on the other hand, is automatically ended by "leaveCall" + // below. + if (ownPeer && delayedConnectionToPeer[ownPeer.id]) { + clearInterval(delayedConnectionToPeer[ownPeer.id]) + delete delayedConnectionToPeer[ownPeer.id] + } + webrtc.leaveCall() }) @@ -734,6 +770,10 @@ export default function initWebRtc(signaling, _callParticipantCollection, _local const forceReconnect = function(signaling, flags) { if (ownPeer) { + if (delayedConnectionToPeer[ownPeer.id]) { + clearInterval(delayedConnectionToPeer[ownPeer.id]) + delete delayedConnectionToPeer[ownPeer.id] + } ownPeer.end() ownPeer = null @@ -1339,6 +1379,11 @@ export default function initWebRtc(signaling, _callParticipantCollection, _local webrtc.on('disconnected', function() { if (ownPeer) { + if (delayedConnectionToPeer[ownPeer.id]) { + clearInterval(delayedConnectionToPeer[ownPeer.id]) + delete delayedConnectionToPeer[ownPeer.id] + } + ownPeer.end() ownPeer = null