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中的事件代理初探
Mar 08 Javascript
使用bootstrap3开发响应式网站
May 12 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
Sep 09 Javascript
jQuery绑定事件的四种方式介绍
Oct 31 Javascript
微信小程序中的swiper组件详解
Apr 14 Javascript
JavaScript之DOM_动力节点Java学院整理
Jul 03 Javascript
关于 angularJS的一些用法
Nov 29 Javascript
在layui下对元素进行事件绑定的实例
Sep 06 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
Nov 19 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
Mar 08 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
vue实现列表拖拽排序的示例代码
Apr 08 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.ini中文版(2)
2006/10/09 PHP
PHP PDO函数库详解
2010/04/27 PHP
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
Javascript 按位与运算符 (&)使用介绍
2014/02/04 Javascript
js脚本实现数据去重
2014/11/27 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
解决js函数闭包内存泄露问题的办法
2016/01/25 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
Python 字典dict使用介绍
2014/11/30 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
pandas中Timestamp类用法详解
2017/12/11 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
Python 私有化操作实例分析
2019/11/21 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
爽歪歪广告词
2014/03/20 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
售后服务质量承诺书
2015/04/29 职场文书
应急管理工作总结2015
2015/05/04 职场文书
python Polars库的使用简介
2021/04/21 Python