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 相关文章推荐
提高网站信任度的技巧
Oct 17 Javascript
jQuery新闻滚动插件 jquery.roller.js
Jun 27 Javascript
jQuery $.data()方法使用注意细节
Dec 31 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
基于javascript实现彩票随机数生成(简单版)
Apr 17 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
Jun 12 Javascript
input file上传 图片预览功能实例代码
Oct 25 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
Jan 06 Javascript
实例讲解JavaScript预编译流程
Jan 24 Javascript
刷新页面后让控制台的js代码继续执行
Sep 20 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
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
php常用的安全过滤函数集锦
2014/10/09 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
Python性能优化的20条建议
2014/10/25 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
python绘制地震散点图
2019/06/18 Python
Python如何实现动态数组
2019/11/02 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
英国著名的小众美容品牌网站:Alyaka
2017/08/08 全球购物
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
平面设计师的工作职责
2013/11/21 职场文书
中学教师培训制度
2014/01/31 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript