我需要录制视频(带有音频轨道)和来自服务中另一个音频输入的另一个音频轨道。第二个麦克风的录音必须是可选的,并通过复选框进行控制。
请检查它的演示:
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上正确初始化流吗?
答案 0 :(得分:0)
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);
})