2017-07-19 170 views
1

我尝试从网络摄像头拍摄网络浏览器的快照。当我在下面使用此代码时,它适用于移动设备(Google Chrome on Android),但不适用于Google Chrome on Desktop。视频不显示。我收到错误名称:TrackStartErrorDevicesNotFoundError。它使用外部USB摄像头进行测试。从网络摄像头拍摄网站快照

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta charset="utf-8"> 
 
    <title>Display Webcam Stream</title> 
 
    <style> 
 
     #container { 
 
      margin: 0 auto; 
 
      max-width: 480px; 
 
     } 
 

 
     video, img { 
 
      max-width: 100%; 
 
      background-color: #f2f3f5; 
 
     } 
 

 
     video { 
 
      height: 400px; 
 
     } 
 
    </style> 
 
</head> 
 

 
<body> 
 
<div id="container"> 
 
    <video autoplay></video> 
 
</div> 
 
<script> 
 
    var video = document.querySelector('video'), canvas; 
 

 

 
    function takeSnapshot() { 
 
     var img = document.querySelector('img') || document.createElement('img'); 
 
     var context; 
 
     var width = video.offsetWidth, height = video.offsetHeight; 
 

 
     canvas = canvas || document.createElement('canvas'); 
 
     canvas.width = width; 
 
     canvas.height = height; 
 

 
     context = canvas.getContext('2d'); 
 
     context.drawImage(video, 0, 0, width, height); 
 

 
     img.src = canvas.toDataURL('image/png'); 
 
     document.body.appendChild(img); 
 
    } 
 

 
    if (navigator.mediaDevices === undefined) { 
 
     navigator.mediaDevices = {}; 
 
    } 
 

 
    if (navigator.mediaDevices.getUserMedia === undefined) { 
 
     navigator.mediaDevices.getUserMedia = function (constraints) { 
 

 
      var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia; 
 

 
      if (!getUserMedia) { 
 
       return Promise.reject(new Error('getUserMedia is not implemented in this browser')); 
 
      } 
 

 
      return new Promise(function (resolve, reject) { 
 
       getUserMedia.call(navigator, constraints, resolve, reject); 
 
      }); 
 
     } 
 
    } 
 

 
    var constraints = {audio: false, video: {width: 640, height: 480}}; 
 
    navigator.mediaDevices.getUserMedia(constraints) 
 
      .then(function (stream) { 
 
       if ("srcObject" in video) { 
 
        video.srcObject = stream; 
 
       } else { 
 
        video.src = window.URL.createObjectURL(stream); 
 
       } 
 

 
       video.onloadedmetadata = function (e) { 
 
        video.play(); 
 
       }; 
 

 
       video.addEventListener('click', takeSnapshot); 
 
      }) 
 
      .catch(function (err) { 
 
       console.log(err.name + ": " + err.message); 
 
      }); 
 
</script> 
 
</body> 
 
</html>

我出的任何选项:( 我做错了吗?它可以工作在最常用的桌面网络浏览器。

回答

0

最有可能您的摄像头或摄像头驱动程序无法正常工作

这就是你所得到的两个错误指向:

  • DevicesNotFoundError是Chrome在您请求视频轨道(通过约束)但网络摄像头丢失时抛出的非规范错误。 Firefox/spec相当于NotFoundError

  • TrackStartError是当Chrome浏览器(在Windows上)由另一个应用程序使用摄像头时抛出的非规格错误。 Firefox/spec相当于NotReadableError。所述MDN description指向其他原因,以及:

    尽管用户获准使用匹配装置,在该防止对设备

    访问的操作系统,浏览器,或网页水平发生了硬件错误

来源:Common getUserMedia() Errors