如何在HTML5上使用JavaScript整合网络摄像头

  • Post category:jquery

如何在HTML5上使用JavaScript整合网络摄像头

HTML5提供了WebRTC API,可以用于实时通信,其中包括使用网络摄像头的能力。我们可以使用JavaScript和HTML5创建一个简单的摄像头应用程序,以下是整合网络摄像头的完整攻略。

1.检查浏览器支持情况

在使用摄像头前,我们需要检查浏览器是否支持WebRTC API。可以通过以下JavaScript代码检查浏览器是否支持getUserMedia()函数:

if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
  // 支持getUserMedia函数
} else {
  // 不支持getUserMedia函数
}
  1. 获取摄像头流媒体

使用JavaScript的getUserMedia函数可以获取摄像头的流媒体,代码如下:

navigator.mediaDevices.getUserMedia({ video: true })
  .then(function(stream) {
    // 渲染视频流
    var video = document.querySelector('video');
    video.srcObject = stream;
    video.onloadedmetadata = function(e) {
      video.play();
    };
  })
  .catch(function(err) {
    console.log(err.name + ": " + err.message);
  });

上面的代码可以获取到摄像头流媒体,并将摄像头流媒体渲染到video元素上。这将会在页面上创建一个视频画面(video element)。

3.截屏并显示

我们可以通过Canvas将摄像头流媒体绘制到画布(canvas)上,在画布上截取一张图像,然后将图像作为图像(image)元素显示在HTML上。

var canvas = document.querySelector('canvas');
var video = document.querySelector('video');

navigator.mediaDevices.getUserMedia({ video: true })
  .then(function(stream) {
    video.srcObject = stream;
    video.onloadedmetadata = function(e) {
      video.play();
      // 将视频流绘制到canvas上
      var ctx = canvas.getContext('2d');
      ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
      // 将canvas转换为图像
      var img = new Image();
      img.src = canvas.toDataURL('image/png');
      // 将图像显示在html上
      document.body.appendChild(img);
    };
  })
  .catch(function(err) {
    console.log(err.name + ": " + err.message);
  });

上述代码将实时的摄像头数据渲染到canvas上,然后获取到画布上的图像(image),最后将它显示在HTML上。

4.完整示例

接下来是一个完整的示例代码,它可以通过浏览器渲染实时视频并截取屏幕的图像:

<html>
<head>
    <title>Web Camera</title>
</head>
<body>
    <canvas width="640" height="480"></canvas>
    <script>
        var canvas = document.querySelector('canvas');
        var video = document.createElement('video');
        video.autoplay = true;

        navigator.mediaDevices.getUserMedia({ video: true })
           .then(function(stream) {
                   video.srcObject = stream;
                   video.onloadedmetadata = function(e) {
                        video.play();
                        var ctx = canvas.getContext('2d');
                        ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
                        var img = new Image();
                        img.src = canvas.toDataURL('image/png');
                        document.body.appendChild(img);
                   };
           })
           .catch(function(err) {
                   console.log(err.name + ": " + err.message);
           });
    </script>
</body>
</html>

运行上述代码后,会在页面上看到一个大小为640×480像素的canvas元素,上面显示实时视频,并且在画布上截取闪烁的屏幕图像。