You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Android设备摄像头设为JavaScript视频源?AR应用适配求助

解决Android浏览器中AR.js摄像头NotFoundError问题

我之前在做AR.js项目时也碰到过这个Android浏览器的摄像头NotFoundError,折腾了好一阵才解决,结合你的代码情况,给你几个针对性的方案:

  • 先搞定摄像头权限问题
    Android上的浏览器对媒体权限管控很严,必须确保用户主动授权了摄像头访问。你可以在初始化AR源前先做权限检查,避免直接报错:

    // 先请求摄像头权限,通过后再初始化AR
    navigator.mediaDevices.getUserMedia({ video: true })
      .then(() => {
        initARSource();
      })
      .catch(err => {
        console.error("摄像头权限异常:", err);
        alert("请先允许摄像头权限才能使用AR功能哦");
      });
    
    function initARSource() {
      var arToolkitSource = new THREEx.ArToolkitSource({
          sourceType : 'webcam',
      });
      // 这里继续你的AR初始化逻辑...
    }
    

    另外,有些浏览器第一次会默认拒绝权限,最好在页面上加个明显的提示,引导用户去设置里开启权限。

  • 必须用HTTPS部署(localhost除外)
    现在主流Android浏览器(比如Chrome、Edge)都要求媒体设备访问必须在HTTPS环境下,HTTP环境会直接禁止摄像头调用。如果你是在服务器上部署应用,一定要配置HTTPS;本地开发用localhost是没问题的。

  • 排查浏览器兼容性
    不同Android浏览器对WebRTC的支持不一样,AR.js依赖WebRTC获取摄像头流。尽量用Chrome、Firefox这些主流浏览器测试,别用系统自带的旧版浏览器。可以加个简单的兼容性检测:

    if (!navigator.mediaDevices?.getUserMedia) {
      alert("你的浏览器不支持摄像头访问,请升级到最新版本的主流浏览器");
      return;
    }
    
  • 指定摄像头设备(可选)
    有些Android设备有前后两个摄像头,默认选择可能出错。AR应用一般需要后置摄像头,你可以在配置里明确指定:

    var arToolkitSource = new THREEx.ArToolkitSource({
        sourceType : 'webcam',
        facingMode: 'environment', // 指定用后置摄像头,'user'是前置
        sourceWidth: 640,
        sourceHeight: 480
    });
    

    注意facingMode在部分旧浏览器上可能不支持,需要做降级处理。

  • 排查硬件或占用问题
    极少数情况是设备摄像头硬件故障,或者被其他应用占用了。可以建议用户关闭其他用摄像头的APP,重启设备后再试试。

内容的提问来源于stack exchange,提问作者Kanerva Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:53:44