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 相关文章推荐
HTML代码中标签的全部属性 中文注释说明
Mar 26 Javascript
jquery lazyload延迟加载技术的实现原理分析
Jan 24 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
Jan 13 Javascript
Textarea根据内容自适应高度
Oct 28 Javascript
javascript实现验证身份证号的有效性并提示
Apr 30 Javascript
深入理解js数组的sort排序
May 28 Javascript
Bootstrap入门教程一Hello Bootstrap初识
Mar 02 Javascript
详解webpack提取第三方库的正确姿势
Dec 22 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
May 07 Javascript
js input输入百分号保存数据库失败的解决方法
May 26 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
Jul 23 jQuery
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
May 06 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中ini_set与ini_get用法实例
2014/11/04 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
JS打开新窗口的2种方式
2013/04/18 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
jQuery+ajax实现文件上传功能
2020/12/22 jQuery
Python 字典(Dictionary)操作详解
2014/03/11 Python
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
pip命令无法使用的解决方法
2018/06/12 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
单位办理社保介绍信
2014/01/10 职场文书
信息总监管理职责范本
2014/03/08 职场文书
工地门卫岗位职责范本
2014/07/01 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
防火标语大全
2014/10/06 职场文书
部队2015年终工作总结
2015/04/02 职场文书