uniapp navigator.mediadevices.getusermedia 回调报错notreadableerror如何解决
在uniapp中使用navigator.mediaDevices.getUserMedia获取摄像头权限时,回调报错NotReadableError,提示设备无法访问。已经确认设备摄像头正常且在浏览器中可用,但在uniapp的H5环境下会出现此错误。尝试过以下方法:
- 检查了manifest.json的权限配置
- 确保运行在https环境
- 测试了不同版本的uniapp 问题依旧存在,请问该如何解决这个权限报错?是否需要在uniapp中进行特殊配置?
2 回复
检查摄像头权限是否开启,确保浏览器或App有访问权限。尝试重启设备或更换摄像头。可能是硬件占用或驱动问题。
在 UniApp 中,使用 navigator.mediaDevices.getUserMedia 时出现 NotReadableError 错误通常表示设备无法访问摄像头或麦克风,可能由以下原因导致:
- 硬件被占用:摄像头或麦克风已被其他应用占用。
- 权限问题:未授予摄像头或麦克风权限。
- 设备驱动问题:摄像头驱动异常或配置错误。
- 浏览器兼容性:部分浏览器不支持或限制媒体设备访问。
解决方案
-
检查权限设置:
- 在浏览器或设备设置中,确保已授权当前应用访问摄像头和麦克风。
- 在 UniApp 中,可通过
uni.authorize请求权限(仅部分平台支持):uni.authorize({ scope: 'scope.camera', success: () => { // 权限获取成功,调用 getUserMedia navigator.mediaDevices.getUserMedia({ video: true, audio: true }) .then(stream => { console.log('成功获取媒体流'); }) .catch(error => { console.error('获取失败:', error); }); }, fail: () => { console.error('权限授权失败'); } });
-
关闭其他占用设备的应用:
- 确保没有其他程序(如视频会议、录屏软件)正在使用摄像头或麦克风。
-
检查设备连接与驱动:
- 确认摄像头和麦克风硬件连接正常,更新或重新安装驱动程序。
-
使用 try-catch 处理错误:
- 在调用
getUserMedia时捕获错误,提供用户友好提示:async function startCamera() { try { const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true }); // 处理媒体流 } catch (error) { if (error.name === 'NotReadableError') { uni.showToast({ title: '设备被占用或无法访问', icon: 'none' }); } else { console.error('其他错误:', error); } } }
- 在调用
-
测试不同浏览器或环境:
- 在 Chrome、Safari 等主流浏览器中测试,部分环境(如微信内置浏览器)可能有额外限制。
如果问题持续,尝试重启设备或使用备用媒体设备。

