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

JS使用navigator.mediaDevices.getUserMedia调用摄像头报srcObject空对象错误如何解决

错误原因
  • ID选择错误:document.getElementById() 方法的入参不需要加#前缀(#是querySelector的选择器语法),且你实际<video>标签的id属性值为videoElement,代码中错误填写为videoInput,导致获取到的video对象为null,赋值srcObject时触发空对象报错。
  • 标签语法错误:<video>标签未闭合,可能导致DOM解析异常。
  • 执行时机错误:JS代码在DOM未完成渲染时就执行,此时还未解析到<video>标签,也会获取到空对象。
  • 环境要求错误:调用getUserMedia接口的页面必须运行在localhost或HTTPS环境下,否则浏览器会默认禁止权限申请。
修正后可运行的完整代码
<video autoplay="true" id="videoElement"></video>
<script>
// 等待DOM完全加载后再执行摄像头初始化逻辑
document.addEventListener('DOMContentLoaded', initialize_camera);

function initialize_camera(){
  // 正确获取video元素,入参为标签id属性的值,不需要加#
  let video = document.getElementById("videoElement");
  navigator.mediaDevices.getUserMedia({ video: true, audio: false })
      .then(function(stream) {
          video.srcObject = stream;
          video.play();
      })
      .catch(function(err) {
          console.log("An error occurred! " + err);
      });
}
</script>
适配opencv.js的额外注意事项
  • 如果你需要给opencv.js读取视频帧,需要给<video>标签额外设置width和height属性,保证画布尺寸匹配你的处理需求。
  • 调用cv.VideoCapture读取帧的逻辑需要在摄像头成功开启、video元素触发canplay事件后再执行,避免读取到空帧。

内容的提问来源于stack exchange,提问作者Theo Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:06:04