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 图片延迟加载并等比缩放插件
Nov 09 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
Apr 27 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
Aug 01 Javascript
JS日期和时间选择控件升级版(自写)
Aug 02 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
Mar 19 Javascript
AngularJS基础教程之简单介绍
Sep 27 Javascript
整理Javascript基础入门学习笔记
Nov 29 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
Feb 19 Javascript
基于vue实现圆形菜单栏组件
Jul 05 Javascript
微信小程序实现上传图片裁剪图片过程解析
Aug 22 Javascript
javascript实现图片轮换动作方法
Aug 07 Javascript
vue3.0中友好使用antdv示例详解
Jan 05 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脚本数据库功能详解(中)
2006/10/09 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
基于 D3.js 绘制动态进度条的实例详解
2018/02/26 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
Python实现的简单万年历例子分享
2014/04/25 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
python调用接口的4种方式代码实例
2019/11/19 Python
tensorflow 模型权重导出实例
2020/01/24 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
艺术用品:Arteza
2018/11/25 全球购物
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
大二学习计划书范文
2014/04/27 职场文书
承诺书格式范文
2014/06/03 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers
在项目中使用redis做缓存的一些思路
2021/09/14 Redis