html 与 react 的页面 录像组件

314 阅读1分钟

对比 html 与 react 调用 摄像头 展示 到 web 页面

react 实现 摄像头 采集 组件, 调用 电脑 摄像头 展示到 web 页面, 与 html 的对比

将原生代码修改为 react 组件代码

在这里插入代码片

html 版本的原生代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>GET VIDEO</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <input
      type="button"
      title="开启摄像头"
      value="开启摄像头"
      onclick="getMedia()"
    />
    <video id="video" width="500px" height="500px" autoplay="autoplay"></video>
    <canvas id="canvas" width="500px" height="500px"></canvas>
    <button id="snap" onclick="takePhoto()">拍照</button>
    <script>
      //获得video摄像头区域
      let video = document.getElementById("video");
      async function getMedia() {
        let constraints = {
          video: { width: 500, height: 500 },
          audio: true,
        };
        /*
        这里介绍新的方法:H5新媒体接口 navigator.mediaDevices.getUserMedia()
        这个方法会提示用户是否允许媒体输入,(媒体输入主要包括相机,视频采集设备,屏幕共享服务,麦克风,A/D转换器等)
        返回的是一个Promise对象。
        如果用户同意使用权限,则会将 MediaStream对象作为resolve()的参数传给then()
        如果用户拒绝使用权限,或者请求的媒体资源不可用,则会将 PermissionDeniedError作为reject()的参数传给catch()
        try {
          let MediaStream = await navigator.mediaDevices.getUserMedia(
            constraints
          );
          console.log("返回对象", MediaStream);
          video.srcObject = MediaStream;
          video.play();
        } catch (e) {
          console.log(e);
        }
      }
      function takePhoto() {
        //获得Canvas对象
        let canvas = document.getElementById("canvas");
        let ctx = canvas.getContext("2d");
        ctx.drawImage(video, 0, 0, 500, 500);
      }
    </script>
  </body>
</html>