diff --git a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js index a828461684f090cdbdf7dc8449cf10acff5aa6c4..dbec2c5f1818ece149e73884b2425c9315938e6e 100644 --- a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js +++ b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js @@ -317,6 +317,7 @@ export default class SIPBridge extends BaseAudioBridge { setDefaultInputDevice() { const handleMediaSuccess = (mediaStream) => { const deviceLabel = mediaStream.getAudioTracks()[0].label; + mediaStream.getTracks().forEach(track => track.stop()); return navigator.mediaDevices.enumerateDevices().then((mediaDevices) => { const device = mediaDevices.find(d => d.label === deviceLabel); return this.changeInputDevice(device.deviceId); diff --git a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js index 8f3c04481fdf23b8c723bed7712c539bfd0f5f84..09840be529445febff32fa5483ab5976fd4b1cfa 100644 --- a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js +++ b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js @@ -19,6 +19,7 @@ const CALL_STATES = { class AudioManager { constructor() { this._inputDevice = { + value: 'default', tracker: new Tracker.Dependency(), }; @@ -203,6 +204,9 @@ class AudioManager { this.isConnecting = false; this.isHangingUp = false; + this.inputStream.getTracks().forEach(track => track.stop()); + this.inputDevice = { id: 'default' }; + if (!this.error && !this.isEchoTest) { this.notify(this.messages.info.LEFT_AUDIO); } @@ -273,6 +277,7 @@ class AudioManager { .then(handleChangeInputDeviceSuccess) .catch(handleChangeInputDeviceError); } + return this.bridge.changeInputDevice(deviceId) .then(handleChangeInputDeviceSuccess) .catch(handleChangeInputDeviceError); @@ -283,17 +288,18 @@ class AudioManager { } set inputDevice(value) { - Object.assign(this._inputDevice, value); + this._inputDevice.value = value; this._inputDevice.tracker.changed(); } get inputStream() { - return this._inputDevice.stream; + this._inputDevice.tracker.depend(); + return this._inputDevice.value.stream; } get inputDeviceId() { this._inputDevice.tracker.depend(); - return this._inputDevice.id; + return this._inputDevice.value.id; } set userData(value) {