js调用网络摄像头的方法


Posted in Javascript onDecember 05, 2020

不支持IE浏览器(需要使用flash插件), 支持移动端, 未经过完全测试

PC端使用的时候, HTML页面需要预留video标签, canvas标签

移动端使用的时候, HTML页面需要预留file标签, canvas标签, img标签

(function (window, document) {
  window.camera = {
    init: function (options) {
      /**
       * options 属性示例
       * videoID: video控件ID
       * canvasID: canvas控件ID
       * fileID: type为file的input控件的ID
       * imageID: img控件的ID
       * videoEnable: 是否启用摄像头
       * audioEnable: 是否启用麦克风
       * videoWidth: 视频宽度
       * videoHeight: 视频高度
       * photoWidth: 拍照宽度
       * photoHeight: 拍照高度
       */

      _options = options;
      if (isMobileTerminal()) {
        initMobileTerminal();
      } else {
        initComputerTerminal();
      }
    },
    photo: function () {
      if (isMobileTerminal()) {
        photoMobileTerminal();
      } else {
        photoComputerTerminal();
      }
    }
  };

  let _options = null;

  function initComputerTerminal() {
    let videoDom = document.getElementById(_options.videoID);
    if (!videoDom) {
      alert('Video 控件无效');
      return;
    }

    let canvasDom = document.getElementById(_options.canvasID);
    if (!canvasDom) {
      alert('Canvas 控件无效');
      return;
    }
    canvasDom.setAttribute('width', _options.photoWidth + 'px');
    canvasDom.setAttribute('height', _options.photoHeight + 'px');

    let parameters = {
      video: _options.videoEnable ? {
        width: _options.videoWidth,
        height: _options.videoHeight
      } : false,
      audio: _options.audioEnable
    };

    navigator.mediaDevices.getUserMedia(parameters)
      .then(function (MediaStream) {
        video.srcObject = MediaStream;
        video.play();
      }).catch(function (reason) {
        console.log(reason);
        alert(reason);
      });
  }

  function photoComputerTerminal() {
    let videoDom = document.getElementById(_options.videoID);
    if (!videoDom) {
      alert('Video 控件无效');
      return;
    }


    let canvasDom = document.getElementById(_options.canvasID);
    if (!canvasDom) {
      alert('Canvas 控件无效');
      return;
    }

    let context = canvasDom.getContext('2d');
    context.drawImage(videoDom, 0, 0, _options.photoWidth, _options.photoHeight);
  }

  function initMobileTerminal() {
    let fileDom = document.getElementById(_options.fileID);
    if (!fileDom) {
      alert('File 控件无效');
      return;
    }

    fileDom.setAttribute('accept', 'image/*');
    fileDom.setAttribute('capture', 'camera');

    let canvasDom = document.getElementById(_options.canvasID);
    if (!canvasDom) {
      alert('Canvas 控件无效');
      return;
    }

    canvasDom.setAttribute('width', _options.photoWidth + 'px');
    canvasDom.setAttribute('height', _options.photoHeight + 'px');

    let imageDom = document.getElementById(_options.imageID);
    if (!imageDom) {
      alert('Image 控件无效');
      return;
    }

    fileDom.addEventListener('change', function () {
      let file = fileDom.files[0];
      let reader = new FileReader();
      reader.onloadend = function () {
        imageDom.setAttribute('src', reader.result);

        setTimeout(function () {
          let context = canvas.getContext("2d");
          context.drawImage(imageDom, 0, 0, _options.photoWidth, _options.photoHeight);
        }, 300);
      };
      reader.readAsDataURL(file);
    });
  }

  function photoMobileTerminal() {
    let fileDom = document.getElementById(_options.fileID);
    fileDom.click();
  }

  function isMobileTerminal() {
    if (/AppleWebKit.*Mobile/i.test(navigator.userAgent) || /Mobile/.test(navigator.userAgent) || /MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))
      return /Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent);
    return false;
  }
})(window, document);

以上就是js调用网络摄像头的方法的详细内容,更多关于js调用网络摄像头的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
用javascript实现读取txt文档的脚本
Jul 20 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
Sep 03 Javascript
鼠标滑过出现预览的大图提示效果
Feb 26 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
Apr 10 Javascript
avascript中的自执行匿名函数应用示例
Sep 15 Javascript
Node.js中child_process实现多进程
Feb 03 Javascript
基于jquery实现在线选座订座之影院篇
Aug 24 Javascript
JavaScript学习小结(7)之JS RegExp
Nov 29 Javascript
浅谈jQuery效果函数
Sep 16 Javascript
JS面向对象编程——ES6 中class的继承用法详解
Mar 03 Javascript
使用next.js开发网址缩短服务的方法
Jun 17 Javascript
微信小程序实现选择地址省市区三级联动
Jun 21 Javascript
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 #Vue.js
vue+element_ui上传文件,并传递额外参数操作
Dec 05 #Vue.js
JavaScript实现浏览器网页自动滚动并点击的示例代码
Dec 05 #Javascript
解决vue下载后台传过来的乱码流的问题
Dec 05 #Vue.js
js获取图片的base64编码并压缩
Dec 05 #Javascript
js重写alert事件(避免alert弹框标题出现网址)
Dec 04 #Javascript
可拖拽组件slider.js使用方法详解
Dec 04 #Javascript
You might like
用PHP实现图象锐化代码
2007/06/14 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
PHP图片加水印实现方法
2016/05/06 PHP
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
JS原型链怎么理解
2016/06/27 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
JS中的phototype详解
2017/02/04 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
python服务器与android客户端socket通信实例
2014/11/12 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Python操作Sql Server 2008数据库的方法详解
2018/05/17 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
如何用python批量调整视频声音
2020/12/22 Python
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
丽江古城导游词
2015/02/03 职场文书
教师党员自我评价2015
2015/03/04 职场文书
复兴之路展览观后感
2015/06/02 职场文书
基于python实现银行管理系统
2021/04/20 Python
一行代码python实现文件共享服务器
2021/04/22 Python
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang