详解HTML5 使用video标签实现选择摄像头功能


Posted in Javascript onOctober 25, 2017

详解HTML5 使用video标签实现选择摄像头功能

1. html

// jquery reference  
// <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> 
// 
 
 
  <input type="hidden" name="imgValue" id="imgValue" /> 
  <button id="btnOpen1" class="btn btn-default" type="button" >Open WebCam</button> 
  <select id="videoSource" ></select> 
 
 
  <div id="vdoOne" style="display:none"> 
    <video id="video" style="margin-top:15px;margin-bottom:15px;" width="300" autoplay></video> 
    <canvas id="canvasPreview" style="margin-top:15px;" width="300" height="224"></canvas> 
    <canvas id="canvasUpload" style="display:none;" width='300' height='224'></canvas> 
    <button id="snap" class="btn btn-default" type="button">Snap Photo</button> 
  </div>

2. javascript

<script> 
 
 
//// Elements for taking the snapshot 
    var canvasPreview = document.getElementById('canvasPreview'); 
    var canvasUpload = document.getElementById('canvasUpload'); 
    var contextPreview = canvasPreview.getContext('2d'); 
    var contextUpload = canvasUpload.getContext('2d'); 
 
 
 
 
    //#################### Video Source #######################3 
    var videoElement = document.querySelector('video'); 
    var videoSelect = document.querySelector('select#videoSource'); 
 
 
    navigator.mediaDevices.enumerateDevices() 
      .then(gotDevices).then(getStream).catch(handleError); 
 
 
    videoSelect.onchange = getStream; 
 
 
 
 
    function gotDevices(deviceInfos) { 
      for (var i = 0; i < deviceInfos.length; ++i) { 
        var deviceInfo = deviceInfos[i]; 
        var option = document.createElement('option'); 
        option.value = deviceInfo.deviceId; 
        if (deviceInfo.kind === 'videoinput') { 
          option.text = deviceInfo.label || 
            'camera ' + 
            (videoSelect.length + 1); 
          videoSelect.appendChild(option); 
        } else { 
          console.log('Found ome other kind of source/device: ', deviceInfo); 
        } 
      } 
    } 
 
 
    var _streamCopy = null; 
    function getStream() { 
      if (_streamCopy != null) { 
        try { 
          _streamCopy.stop(); // if this method doesn't exist, the catch will be executed. 
        } catch (e) { 
          _streamCopy.getVideoTracks()[0].stop(); // then stop the first video track of the stream 
        } 
      } 
       
      var constraints = { 
        audio:false, 
        video: { 
          optional: [ 
            { 
              sourceId: videoSelect.value 
            } 
          ] 
        } 
      }; 
       
      navigator.mediaDevices.getUserMedia(constraints).then(gotStream).catch(handleError); 
    } 
 
 
    function gotStream(stream) { 
      _streamCopy = stream; // make stream available to console 
      videoElement.srcObject = stream; 
    } 
 
 
    function handleError(error) { 
      alert(error.name + ": " + error.message); 
    } 
 
 
    //######################## End Video Source ################# 
 
 
 
 
    // Get access to the camera! 
    if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { 
      navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) { 
        videoElement.src = window.URL.createObjectURL(stream); 
        videoElement.play(); 
 
 
      }); 
    } else { 
      document.getElementById("pnlVideo1").style.display = "none"; 
    } 
 
 
 
 
    //// Trigger photo take 
    document.getElementById("snap").addEventListener("click", 
      function() { 
        contextPreview.drawImage(videoElement, 0, 0, 300, 224); 
        contextUpload.drawImage(videoElement, 0, 0, 300, 224); 
        document.getElementById("video").style.display = "none"; 
        document.getElementById("snap").style.display = "none"; 
        document.getElementById("canvasPreview").style.display = "block"; 
 
 
        var image = document.getElementById("canvasUpload").toDataURL("image/jpeg"); 
        image = image.replace('data:image/jpeg;base64,', ''); 
        $("#imgValue").val(image); 
         
        alert("image value :" + image); 
      }); 
 
 
    //// Trigger photo take 
 
 
 
 
    document.getElementById("btnOpen1").addEventListener("click", 
      function() { 
        document.getElementById("vdoOne").style.display = "block"; 
        document.getElementById("video").style.display = "block"; 
        document.getElementById("snap").style.display = "block"; 
        document.getElementById("canvasPreview").style.display = "none"; 
      }); 
       
</script>

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
JS去除数组重复值的五种不同方法
Sep 06 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
Oct 24 Javascript
与Math.pow 相反的函数使用介绍
Aug 04 Javascript
举例讲解jQuery中可见性过滤选择器的使用
Apr 18 Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 Javascript
node实现简单的反向代理服务器
Jul 26 Javascript
React中的render何时执行过程
Apr 13 Javascript
详解Angular6学习笔记之主从组件
Sep 05 Javascript
微信小程序页面缩放式侧滑效果的实现代码
Nov 15 Javascript
vue-cli3 karma单元测试的实现
Jan 18 Javascript
如何自动化部署项目?折腾服务器之旅~
Apr 16 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
Nov 14 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
Oct 25 #Javascript
JS使用tofixed与round处理数据四舍五入的区别
Oct 25 #Javascript
javascript计算对象长度的方法
Oct 25 #Javascript
AngularJS实现的select二级联动下拉菜单功能示例
Oct 25 #Javascript
Angular4实现鼠标悬停3d倾斜效果
Oct 25 #Javascript
详解vue 组件之间使用eventbus传值
Oct 25 #Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
Oct 25 #Javascript
You might like
session在PHP大型web应用中的使用
2011/06/25 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
详解AngularJS controller调用factory
2017/05/19 Javascript
Bootstrap Table使用整理(一)
2017/06/09 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
Vue指令指令大全
2019/02/09 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
Python matplotlib生成图片背景透明的示例代码
2019/08/30 Python
python实现淘宝购物系统
2019/10/25 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
管理信息系学生的自我评价
2014/01/11 职场文书
销售个人求职信范文
2014/04/28 职场文书
个人总结与自我评价
2014/09/18 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
文明班级申报材料
2014/12/24 职场文书
Java使用Unsafe类的示例详解
2021/09/25 Java/Android