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 相关文章推荐
Jquery获取当前城市的天气信息
Aug 05 Javascript
jQuery EasyUI Tab 选项卡问题小结
Aug 16 Javascript
AngularJS Controller作用域
Jan 09 Javascript
基于jQuery实现弹幕APP
Feb 10 Javascript
在vue-cli项目中使用bootstrap的方法示例
Apr 21 Javascript
JS数组中对象去重操作示例
Jun 04 Javascript
JS正则表达式验证端口范围(0-65535)
Jan 06 Javascript
详解Vue 单文件组件的三种写法
Feb 19 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
May 14 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
Sep 07 Javascript
如何使用 vue-cli 创建模板项目
Nov 19 Vue.js
Axios代理配置及封装响应拦截处理方式
Apr 07 Vue.js
浅谈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 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
jquery实现直播视频弹幕效果
2020/02/25 jQuery
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
python与mysql数据库交互的实现
2020/01/06 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
教师年终个人自我评价
2013/10/04 职场文书
心理健康教育心得体会
2013/12/29 职场文书
喝酒检查书范文
2014/02/23 职场文书
会员卡清退活动总结
2014/08/27 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
信用卡工资证明格式
2014/09/13 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
颐和园导游词400字
2015/01/30 职场文书
教师工作能力自我评价
2015/03/04 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers