У меня есть раскрывающийся список для выбора различных мультимедийных устройств для записи аудио и видео.
При смене устройства в Firefox я останавливаю все активные mediaStreamTrack, а затем снова ловлю поток с выбранного устройства. Но это занимает слишком много времени, чтобы решить.
Работает нормально в Google Chrome.
_clearStream() {
if(this.get('mediaStream')) {
this.get('mediaStream').getAudioTracks().forEach(track => track.stop())
this.get('mediaStream').getVideoTracks().forEach(track => track.stop())
}
if(this.get('audio.mediaStream')) {
this.get('audio.mediaStream').getAudioTracks().forEach(track => track.stop())
this.get('audio.mediaStream').getVideoTracks().forEach(track => track.stop())
}
this._getStream()
},
_getStream() {
const constraints = {
audio: { deviceId: this.get('audioSourceDevice') ? { exact: this.get('audioSourceDevice.deviceId')} : undefined },
video: { width: 320, height: 240, deviceId: this.get('videoSourceDevice') ? { exact: this.get('videoSourceDevice.deviceId')} : undefined }
}
return navigator.mediaDevices.getUserMedia(constraints).then((stream) => {
this.set('mediaStream', stream)
this.set('audio.mediaStream', stream)
return stream
})
}