![](/img/trans.png)
[英]Firefox never resolving navigator.mediaDevices.getUserMedia()
[英]Can't get two audio streams from navigator.mediaDevices.getUserMedia with Firefox
我需要在服务中录制视频(带有音频轨道)和来自另一个音频输入的另一个音频轨道。 第二个麦克风的录音必须是可选的,并通过复选框进行控制。
请检查它的演示:
function getMediaWithConstraints(audioSource, videoSource) { // webrtc does supports only fixed sizes for firefox 16:9 ratio. let w = 640; let h = 360; let constraints = { audio: { deviceId: audioSource ? { exact: audioSource } : undefined }, video: { deviceId: videoSource ? { exact: videoSource } : undefined, aspectRatio: 1.7777777778, width: { min: w, max: w, ideal: w }, height: { min: h, max: h, ideal: h } } }; navigator.mediaDevices.getUserMedia(constraints) .then(gotStream).catch(errorCallback); } function getSecondMediaWithConstraints(secondAudioSource) { let audioConstraints = { video: false, audio: { deviceId: secondAudioSource ? { exact: secondAudioSource } : undefined } }; navigator.mediaDevices.getUserMedia(audioConstraints) .then(gotSecondStream) .catch(errorCallback); }
它在Chrome中完美运行,但在Firefox中抛出MediaStreamError AbortError“启动音频失败” 。 Firefox的支持服务是必要的。
您至少需要两个音频输入才能进行测试。
有人可以帮助在Firefox上正确初始化流吗?
Firefox中有一个错误(已通过v67.0测试),您无法同时使用来自两个不同麦克风的音频流(参考: https ://bugzilla.mozilla.org/show_bug.cgi?id=1238038) 。 这似乎是导致您的问题的原因。
回复原始和@Kaiido的小提琴(...我无法评论):由于getUserMedia的承诺不一定总是得到解决,它们提供了误导性的结果。 由于gUM调用未按预期完成,因此不会发生错误。 这似乎是因为同时有两个待处理的gUM调用。
为了演示这一点,这里有两个小提琴:
平行: https : //jsfiddle.net/6co2eh0d/
顺序的: https : //jsfiddle.net/73dqbs1p/
// Call gUM one after the other, rather than having them done in parallel. getMediaWithConstraints(audioDeviceSelected, videoDeviceSelected) .then(() => { getSecondMediaWithConstraints(audioSecondDeviceSelected); })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.