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 简单图片导航插件jquery.imgNav.js
Mar 17 Javascript
jQuery 创建Dom元素
May 07 Javascript
JavaScript 判断日期格式是否正确的实现代码
Jul 04 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
Mar 07 Javascript
浅谈JavaScript数据类型
Mar 03 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
Sep 15 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
Jul 11 Javascript
关于JSON与JSONP简单总结
Aug 16 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
Dec 19 Javascript
js中常用的Math方法总结
Jan 12 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
Dec 12 Javascript
vue 实现websocket发送消息并实时接收消息
Dec 09 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 Session 变量的使用方法详解与实例代码
2013/09/11 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
javascript new 需不需要继续使用
2009/07/02 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
python实现马耳可夫链算法实例分析
2015/05/20 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
Python读取实时数据流示例
2019/12/02 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
医院工作检讨书范文
2014/02/10 职场文书
运动会跳远加油稿
2014/02/20 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
抗洪救灾标语
2014/10/08 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python