diff --git a/src/CallMediaHandler.js b/src/CallMediaHandler.js index 4f82e003b9..45ca5dc30d 100644 --- a/src/CallMediaHandler.js +++ b/src/CallMediaHandler.js @@ -23,15 +23,15 @@ export default { // Only needed for Electron atm, though should work in modern browsers // once permission has been granted to the webapp return navigator.mediaDevices.enumerateDevices().then(function(devices) { - const audioIn = {}; - const videoIn = {}; + const audioIn = []; + const videoIn = []; if (devices.some((device) => !device.label)) return false; devices.forEach((device) => { switch (device.kind) { - case 'audioinput': audioIn[device.deviceId] = device.label; break; - case 'videoinput': videoIn[device.deviceId] = device.label; break; + case 'audioinput': audioIn.push(device); break; + case 'videoinput': videoIn.push(device); break; } }); diff --git a/src/components/structures/UserSettings.js b/src/components/structures/UserSettings.js index f660cf71e1..fcb7a70559 100644 --- a/src/components/structures/UserSettings.js +++ b/src/components/structures/UserSettings.js @@ -269,8 +269,8 @@ module.exports = React.createClass({ if (this._unmounted) return; this.setState({ mediaDevices, - activeAudioInput: this._localSettings['webrtc_audioinput'] || 'default', - activeVideoInput: this._localSettings['webrtc_videoinput'] || 'default', + activeAudioInput: this._localSettings['webrtc_audioinput'], + activeVideoInput: this._localSettings['webrtc_videoinput'], }); }); }, @@ -902,7 +902,7 @@ module.exports = React.createClass({ }, _mapWebRtcDevicesToSpans: function(devices) { - return Object.keys(devices).map((deviceId) => {devices[deviceId]}); + return devices.map((device) => {devices[device.deviceId]}); }, _setAudioInput: function(deviceId) { @@ -951,8 +951,14 @@ module.exports = React.createClass({ let microphoneDropdown =

{_t('No Microphones detected')}

; let webcamDropdown =

{_t('No Webcams detected')}

; + const defaultOption = { + deviceId: undefined, + label: _t('Default Device'), + }; + const audioInputs = this.state.mediaDevices.audioinput; - if (Object.keys(audioInputs).length > 0) { + if (audioInputs.length > 0) { + audioInputs.unshift(defaultOption); microphoneDropdown =

Microphone

0) { + if (videoInputs.length > 0) { + videoInputs.unshift(defaultOption); webcamDropdown =

Cameras