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之大字符串的连接的StringBuffer 类
May 08 Javascript
javascript 判断整数方法分享
Dec 16 Javascript
script标签属性用type还是language
Jan 21 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
Oct 16 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
Mar 22 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
Sep 04 Javascript
JavaScript变量声明var,let.const及区别浅析
Apr 23 Javascript
微信小程序Getuserinfo解决方案图解
Aug 24 Javascript
JS函数内部属性之arguments和this实例解析
Oct 07 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
Aug 21 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
May 27 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
Aug 06 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伪静态写法附代码
2008/06/20 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
PDO::getAttribute讲解
2019/01/28 PHP
Javascript Select操作大集合
2009/05/26 Javascript
jQuery中的常用事件总结
2009/12/27 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
Python中处理时间的几种方法小结
2015/04/09 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
医药销售自我评价200字
2014/09/11 职场文书
干部年终考核评语
2015/01/04 职场文书
创业计划书之美甲店
2019/09/20 职场文书