gpt4 book ai didi

javascript - navigator.getUserMedia 允许一个约束,另一个不允许,关闭浏览器提示时调用成功回调

转载 作者:搜寻专家 更新时间:2023-11-01 04:29:59 24 4
gpt4 key购买 nike

这是我的代码。

captureUserMedia(mediaConstraints, successCallback, errorCallback) {
navigator.getUserMedia(mediaConstraints, successCallback, errorCallback);
}

captureUserMedia00(callback){
captureUserMedia({
audio: true,
video: true
}, function(stream) {
console.log('user media Callback', stream);
callback(stream);
}, function(error) {
console.log('user media Error ', JSON.stringify(error));
});
}});
}

在这里,当用户尚未允许视频约束,但已经允许音频(由于其他只是录音)时,当提示相同时,用户“关闭”提示,successCallback 被调用,我不会获得视频流,而只会获得音频。

调用successCallback时如何确保视频和音频权限都被允许?

最佳答案

这实际上是 Chrome 和 Firefox 中的一个错误,因为它 should在这种情况下调用 errorCallback。它已在 Firefox Developer Edition (49) 中修复。

作为解决方法,请检查您是否有两条轨道:

if (stream.getTracks().length < 2) {
throw new Error("Need both");
}

polyfill 可能看起来像这样(在 Chrome 中使用 https fiddle):

let getUserMedia = constraints =>
navigator.mediaDevices.getUserMedia(constraints).then(stream => {
if (constraints.audio && !stream.getAudioTracks().length ||
constraints.video && !stream.getVideoTracks().length) {
stream.getTracks().forEach(track => track.stop());
throw new DOMException("The object can not be found here.",
"NotFoundError");
}
return stream;
});

getUserMedia({ video: true, audio: true })
.then(stream => video.srcObject = stream)
.catch(e => console.log(e.name + ": "+ e.message));
<video id="video" width="160" height="120" autoplay></video>

关于javascript - navigator.getUserMedia 允许一个约束,另一个不允许,关闭浏览器提示时调用成功回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38489214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com