From d5189549bfb172cdfd53a8395ad810b82436184e Mon Sep 17 00:00:00 2001 From: Chad Pilkey <capilkey@gmail.com> Date: Tue, 29 Jan 2019 16:11:20 -0800 Subject: [PATCH] webrtc call is ready in Edge when ICE completed not connected --- .../resources/prod/lib/bbb_webrtc_bridge_sip.js | 13 ++++++++----- .../imports/api/audio/client/bridge/sip.js | 11 +++++++++-- 2 files changed, 17 insertions(+), 7 deletions(-) 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 bb17ee6a32..765bae598d 100755 --- a/bigbluebutton-client/resources/prod/lib/bbb_webrtc_bridge_sip.js +++ b/bigbluebutton-client/resources/prod/lib/bbb_webrtc_bridge_sip.js @@ -534,12 +534,15 @@ function make_call(username, voiceBridge, server, callback, recall, isListenOnly currentSession.mediaHandler.on('iceConnectionConnected', function() { console.log('Received ICE status changed to connected'); if (callICEConnected === false) { - callICEConnected = true; - clearTimeout(iceConnectedTimeout); - if (callActive === true) { - callback({'status':'started'}); + // Edge is only ready once the status is 'completed' so we need to skip this step + if (!bowser.msedge) { + callICEConnected = true; + clearTimeout(iceConnectedTimeout); + if (callActive === true) { + callback({'status':'started'}); + } + clearTimeout(callTimeout); } - clearTimeout(callTimeout); } }); diff --git a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js index 6c7492068c..2892e50581 100755 --- a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js +++ b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js @@ -4,7 +4,7 @@ import { Tracker } from 'meteor/tracker'; import BaseAudioBridge from './base'; import logger from '/imports/startup/client/logger'; import { fetchStunTurnServers } from '/imports/utils/fetchStunTurnServers'; - +import browser from 'browser-detect'; const MEDIA = Meteor.settings.public.media; const MEDIA_TAG = MEDIA.mediaTag; @@ -279,7 +279,14 @@ export default class SIPBridge extends BaseAudioBridge { return new Promise((resolve) => { const { mediaHandler } = currentSession; - const connectionCompletedEvents = ['iceConnectionCompleted', 'iceConnectionConnected']; + let connectionCompletedEvents = ['iceConnectionCompleted', 'iceConnectionConnected']; + // Edge sends a connected first and then a completed, but the call isn't ready until + // the completed comes in. Due to the way that we have the listeners set up, the only + // way to ignore one status is to not listen for it. + if (browser().name === 'edge') { + connectionCompletedEvents = ['iceConnectionCompleted']; + } + const handleConnectionCompleted = () => { connectionCompletedEvents.forEach(e => mediaHandler.off(e, handleConnectionCompleted)); // We have to delay notifying that the call is connected because it is sometimes not -- GitLab