zoukankan      html  css  js  c++  java
  • 谷歌浏览器捕获屏幕

    -

    用到navigator.mediaDevices.getDisplayMedia    api,获取用户授权后,可以捕获屏幕

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <canvas></canvas>
      <video class="shot" muted autoplay width="300" height="200" crossOrigin="anonymous"></video>
      <img class="shotImg" alt="">
    <script>
        var canvas = document.createElement('canvas');
        var img = document.querySelector('.shotImg');
        navigator.mediaDevices.getDisplayMedia({video:true}).then(stream => {
            console.log(stream, 'stream');
            let videoDom = document.querySelector('.shot');
            videoDom.srcObject = stream;
            img.width = videoDom.clientWidth;
            img.height = videoDom.clientHeight; 
            videoDom.onloadeddata = (() => {
              setInterval(() => {
                canvas.width = videoDom.clientWidth;
                canvas.height = videoDom.clientHeight;
                canvas.getContext('2d').drawImage(videoDom, 0, 0, canvas.width, canvas.height);
                var dataURL = canvas.toDataURL('image/png');
                img.src = dataURL;
              }, 200);
            })
        }).catch(error => {
            console.log(error);
        });
    </script>
    </body>
    </html>

     录制视频

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <video class="shot" muted autoplay width="300" height="200" crossOrigin="anonymous"></video>
      <button id="start">录制开始</button>
      <button id="end">录制结束</button>
    <script>
    navigator.mediaDevices.getDisplayMedia({video:true}).then(stream => {
        let videoDom = document.querySelector('.shot');
        videoDom.srcObject = stream;
        createRecorder(stream);
    }).catch(error => {
        console.log(error);
    });
    // 
    start.addEventListener('click', () => {
      console.log('start');
      recorder.start();
    });
    end.addEventListener('click', () => {
      console.log('end');
      recorder.stop();
    });
    let recorder = null;
    let i=0;
    function createRecorder(stream) {
      recorder = new MediaRecorder(stream);
      // recorder.start(10000);
      // 如果 start 没设置 timeslice,ondataavailable 在 stop 时会触发
      recorder.ondataavailable = event => { 
        console.log(event);
        let blob = new Blob([event.data], { type: 'video/mp4' });
        saveMedia(blob);
      };
      recorder.onerror = err => {
        console.error(err);
      };
    };
    // 保存文件
    function saveMedia(blob) {
      let reader = new FileReader();
      reader.onload = () => {
        let buffer = new Buffer(reader.result);
        console.log(buffer, 'buffer');
        // fs.writeFile('test'+i+'.mp4', buffer, {}, (err, res) => {
        //   if (err) return console.error(err);
        // });
        i++;
      };
      reader.onerror = err => console.error(err);
      reader.readAsArrayBuffer(blob);
    };
    </script>
    </body>
    </html>

    -

  • 相关阅读:
    装饰模式Decorator
    File类
    进程之基础
    IO流
    反射之基础
    20155219 题目补做
    2017-2018-1 20155219 《信息安全系统设计基础》实验三——实时系统
    2017-2018-1 20155219 《信息安全系统设计基础》第九周学习总结
    20155219--pwd指令的简单实现
    2017-2018-1 20155219 《信息安全系统设计基础》第8周学习总结
  • 原文地址:https://www.cnblogs.com/fqh123/p/15554539.html
Copyright © 2011-2022 走看看