use*_*392 11 javascript media firefox webrtc getusermedia
在活动媒体流(语音)navigator.mediaDevices.getUserMedia连接到内部麦克风时工作正常,只要我切换到蓝牙设备并重新运行相同的 API 以获取最新的媒体流,我就会收到错误消息"NotReadableError: Concurrent mic process limit."
我浏览了许多论坛,正如许多人所建议的那样,当多个选项卡尝试访问麦克风或/和相机时,此错误通常发生在 Firefox、Mac OS 中。
我确保在 Firefox 浏览器中只打开了一个选项卡,仍然看到相同的错误。
任何有关这方面的线索都将不胜感激。
下面是代码片段
constraints = {
"audio": {"deviceId": deviceId },
"video": false
}
let temp;
navigator.mediaDevices.getUserMedia(constraints).then(function(stream){
temp = stream;
}).catch(function(err) {
console.log(err.name + ": " + err.message);
});
Run Code Online (Sandbox Code Playgroud)
返回以下错误信息
NotReadableError: Concurrent mic process limit.
Run Code Online (Sandbox Code Playgroud)
注意:在 Chrome 和 Edge 中工作正常
浏览器:Firefox 70.0.1(64 位)
操作系统:MacOS Mojave
这意味着您现在无法在 Firefox 中为每个进程一次打开多个麦克风。此限制是Mozilla 正在修复的一个已知错误。
实际上,这意味着您无法从站点打开多个麦克风(同源选项卡通常共享相同的进程)。track.stop()请务必在使用完麦克风后致电。
实际上很少有网站需要同时使用两个麦克风。但网站在从一个麦克风切换到另一个麦克风时仍然会遇到此错误,因为它们通常会在关闭旧麦克风之前打开新麦克风。
track.stop()在尝试从其他麦克风获取轨道之前,先调用现有的麦克风轨道。
这一策略类似于移动设备,一次只能打开一个摄像头。最好的方法是后备策略:仅在必要时停止旧轨道(这样不会对其他浏览器产生影响):
async function getUserMedia(constraints, oldTrack) {
try {
return await navigator.mediaDevices.getUserMedia(constraints);
} catch (e) {
if (e.name != "NotReadableError") throw e;
oldTrack.stop();
return await navigator.mediaDevices.getUserMedia(constraints);
}
}
Run Code Online (Sandbox Code Playgroud)
切换设备时,请使用deviceId: {exact: deviceId}. IE
const constraints = {
audio: {deviceId: {exact: deviceId}},
};
Run Code Online (Sandbox Code Playgroud)
这会告诉浏览器您想要这个特定的设备或失败,并避免Firefox 最近的回归。
虽然回退到其他设备通常是好的,但当用户尝试选择特定设备时就不是这样了。
| 归档时间: |
|
| 查看次数: |
1788 次 |
| 最近记录: |