摄像机和麦克风在Chrome中被手动阻塞(如下图所示):
本地媒体轨道是使用createLocalAudioTrack和createLocalVideoTrack创建的twilio视频库方法,这将引发下一个异常:
DOMException: Permission denied
code: 0
message: "Permission denied"
name: "NotAllowedError"
当尝试使用浏览器本机getUserMedia时,如下所示:
navigator.mediaDevices.getUserMedia({ audio: true, video: true })
.catch(error => {
console.log(error)
})
它在catch块中记录相同的异常:
DOMException: Permission denied
的问题:在创建本地媒体轨道之前,是否可能事先知道没有权限这样做(照相机和麦克风在浏览器中被手动阻塞),并以编程方式请求这样的权限(显示弹出请求权限)来创建轨道?
发布于 2021-12-22 19:54:23
注意,在我写作的时候,这仍然是实验领域
可以使用Permissions.query()
查询权限。
const permissionDescriptors = [
{name: 'camera'},
{name: 'microphone'},
];
const permissions = await Promise.all(permissionDescriptors.map(async descriptor => ({
descriptor,
status: await navigator.permissions.query(descriptor),
})));
for (const {descriptor, status} of permissions) {
console.log(
descriptor.name, // 'camera' | 'microphone'
status.state, // 'granted' | 'denied' | 'prompt'
);
}
您将能够使用Permissions.request()
请求权限。但是,目前在任何浏览器中都不支持这一点。
今天,最好只访问MediaStream
,捕捉并处理一个潜在的异常:
let mediaStream;
try {
const constraints = { audio: true, video: true };
mediaStream = await navigator.mediaDevices.getUserMedia(constraints);
}
catch (ex) {
if (ex instanceof DOMException) {
if (ex.name === 'NotAllowedError') {
// handle permission denied
}
else if (ex.name === 'NotFoundError') {
// handle media not found
}
else {
// handle unexpected DOMException
}
}
else {
// handle unexpected error
}
}
if (!mediaStream) {
// handle no stream
}
else {
// do something with stream
}
https://stackoverflow.com/questions/70454181
复制相似问题