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 相关文章推荐
range 标准化之获取
Aug 28 Javascript
jQuery动态地获取系统时间实现代码
May 24 Javascript
JS版元素周期表实现方法
Aug 05 Javascript
tuzhu_req.js 实现仿百度图片首页效果
Aug 11 Javascript
深入解析JavaScript的闭包机制
Oct 20 Javascript
基于jquery实现日历签到功能
Sep 11 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
May 20 Javascript
全面了解javascript三元运算符
Jun 27 Javascript
基于jQuery实现简单人工智能聊天室
Feb 10 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
May 04 Javascript
vue定义全局变量和全局方法的方法示例
Aug 01 Javascript
vue服务端渲染缓存应用详解
Sep 12 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读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
php更新cookie内容的详细方法
2019/09/30 PHP
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
深入理解jQuery 事件处理
2016/06/14 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
JavaScript实现一个带AI的井字棋游戏源码
2018/05/21 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
物流管理专业大学生自荐信
2013/10/04 职场文书
电子商务专业个人的自我评价
2013/12/19 职场文书
护士进修自我鉴定
2014/02/07 职场文书
投资意向书
2014/07/30 职场文书
英语三分钟演讲稿
2014/08/19 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python