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在IE和Firefox(火狐)的不兼容问题解决方法小结
Apr 13 Javascript
自写简单JS判断是否已经弹出页面
Oct 20 Javascript
jQuery判断多个input file 都不能为空的例子
Jun 23 Javascript
JQuery插件Marquee.js实现无缝滚动效果
Apr 26 Javascript
Bootstrap Fileinput文件上传组件用法详解
May 10 Javascript
微信小程序 wxapp内容组件 progress详细介绍
Oct 31 Javascript
JS实现的添加弹出层并完成锁屏操作示例
Apr 07 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
Nov 15 Javascript
echarts学习笔记之图表自适应问题详解
Nov 22 Javascript
详解vue组件开发脚手架
Jun 15 Javascript
微信小程序实现的自定义分享功能示例
Feb 12 Javascript
关于vue-router-link选择样式设置
Apr 30 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
农民C键的运用技巧
2020/03/04 星际争霸
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
javascript实现简单的全选和反选功能
2016/01/05 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
python Web开发你要理解的WSGI & uwsgi详解
2018/08/01 Python
python如何从文件读取数据及解析
2019/09/19 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
英国莱斯特松木橡木家具网上商店:Choice Furniture Superstore
2019/07/05 全球购物
营业员实习自我鉴定
2013/12/07 职场文书
成人继续教育实施方案
2014/03/01 职场文书
安全生产先进个人总结
2015/02/15 职场文书
Python时间操作之pytz模块使用详解
2022/06/14 Python