Loading...

用户拒绝了设备授权,后续如何开启麦克风和摄像头?

问题描述

使用小鱼WebRTC SDK呼叫时,第一次浏览器会弹出授权框,需要让用户授权麦克风和摄像头权限,类似:

如果用户选择了允许,那么浏览器会记录此状态,后续再入会无需再次授权,可以方便用户后续加入会议操作。

但如果用户选择了禁止操作,那么浏览器会标记为权限​​denied​​状态,即权限拒绝。那么后续再想通过SDK的API打开摄像头或者麦克风,SDK会返回打开设备失败的错误信息,因为SDK再尝试再次采集设备数据流时,浏览器会直接拒绝采集操作,并返回相应的错误信息。

所以,当权限申请被用户拒绝后,一般情况下是无法再次通过API进行打开设备操作。这种情况下,需要业务上进行相应的异常处理,引导用户手动开启授权操作。

解决方式

集成SDK时,可以监听 ​​permission​​ 事件,获取用户的权限变化状态,当用户拒绝授权后,SDK会上报麦克风和摄像头的详细授权信息:

client.on("permission", (e: ICurrentPermission) => {
console.log("用户授权变化: ", e);
});

// granted:已经授予权限
// denied:权限拒绝
// prompt:请求授权中
type TPermissionType = 'granted' | 'denied' | 'prompt' | '';

interface ICurrentPermission {
microphone: TPermissionType;
camera: TPermissionType;
}

然后可以在摄像头/麦克风的事件方法上增加异常逻辑处理,如果监测到是权限被拒绝的情况下,再次开启需要引导用户进行手动授权操作,类似:

通过如上的引导操作,让用户尝试再次手动授权,然后可以重新入会,即可解决权限被拒绝后无法开启设备的问题。

适用浏览器

Chrome系列浏览器、Edge浏览器、360浏览器、火狐浏览器;

注意:

  1. 手机端浏览器每次刷新页面后,都需要重新授权操作;
  2. Safari浏览器每次刷新页面后,再次入会都需要重新授权操作;
意见反馈