uniapp navigator.mediadevices.getusermedia 回调报错notreadableerror如何解决

在uniapp中使用navigator.mediaDevices.getUserMedia获取摄像头权限时,回调报错NotReadableError,提示设备无法访问。已经确认设备摄像头正常且在浏览器中可用,但在uniapp的H5环境下会出现此错误。尝试过以下方法:

  1. 检查了manifest.json的权限配置
  2. 确保运行在https环境
  3. 测试了不同版本的uniapp 问题依旧存在,请问该如何解决这个权限报错?是否需要在uniapp中进行特殊配置?
2 回复

检查摄像头权限是否开启,确保浏览器或App有访问权限。尝试重启设备或更换摄像头。可能是硬件占用或驱动问题。


在 UniApp 中,使用 navigator.mediaDevices.getUserMedia 时出现 NotReadableError 错误通常表示设备无法访问摄像头或麦克风,可能由以下原因导致:

  1. 硬件被占用:摄像头或麦克风已被其他应用占用。
  2. 权限问题:未授予摄像头或麦克风权限。
  3. 设备驱动问题:摄像头驱动异常或配置错误。
  4. 浏览器兼容性:部分浏览器不支持或限制媒体设备访问。

解决方案

  1. 检查权限设置

    • 在浏览器或设备设置中,确保已授权当前应用访问摄像头和麦克风。
    • 在 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('权限授权失败'); }
      });
      
  2. 关闭其他占用设备的应用

    • 确保没有其他程序(如视频会议、录屏软件)正在使用摄像头或麦克风。
  3. 检查设备连接与驱动

    • 确认摄像头和麦克风硬件连接正常,更新或重新安装驱动程序。
  4. 使用 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);
          }
        }
      }
      
  5. 测试不同浏览器或环境

    • 在 Chrome、Safari 等主流浏览器中测试,部分环境(如微信内置浏览器)可能有额外限制。

如果问题持续,尝试重启设备或使用备用媒体设备。

回到顶部