繁体   English   中英

Firefox无法从navigator.mediaDevices.getUserMedia获取两个音频流

[英]Can't get two audio streams from navigator.mediaDevices.getUserMedia with Firefox

我需要在服务中录制视频(带有音频轨道)和来自另一个音频输入的另一个音频轨道。 第二个麦克风的录音必须是可选的,并通过复选框进行控制。

请检查它的演示:

jsfiddle.net/x45h6cg3

 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调用。

为了演示这一点,这里有两个小提琴:

  1. 平行: https : //jsfiddle.net/6co2eh0d/

    • Kaiido的提琴演奏,在调用gUM之前有多余的日志。 表明正在调用gUM,但未解决。
  2. 顺序的: https : //jsfiddle.net/73dqbs1p/

    • Kaiido的小提琴,但是两个gUM调用是按顺序进行的。 显示当解决其他音频设备的gUM时,发生错误。
     // 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM