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访问XML数据的实例
Dec 27 Javascript
脚本安需导入(装载)的三种模式的对比
Jun 24 Javascript
基于jquery的让页面控件不可用的实现代码
Apr 27 Javascript
JavaScript模板入门介绍
Sep 26 Javascript
js获取url中"?"后面的字串方法
May 15 Javascript
JavaScript模拟实现继承的方法
Mar 30 Javascript
JS实现选项卡实例详解
Nov 17 Javascript
Javascript获取随机数的实现方法
Jun 22 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
Jan 13 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
Jul 06 Javascript
JavaScript提升机制Hoisting详解
Oct 23 Javascript
JavaScript 中for/of,for/in 的详细介绍
Nov 17 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
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
PHP实现微信公众平台音乐点播
2014/03/20 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
php网页病毒清除类
2014/12/08 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
详解Node 定时器
2018/02/26 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
python 基础教程之Map使用方法
2017/01/17 Python
Python 处理数据的实例详解
2017/08/10 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
python爬虫超时的处理的实例
2018/12/19 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
建筑专业自荐信
2013/10/18 职场文书
标准化管理实施方案
2014/02/25 职场文书
经理助理岗位职责
2014/03/05 职场文书
供用电专业求职信
2014/07/07 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
房屋授权委托书范本
2014/10/07 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
员工手册编写范本
2015/05/14 职场文书
课题研究阶段性总结
2015/08/13 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
Python图像处理之图像拼接
2021/04/28 Python