详解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 相关文章推荐
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
Nov 27 Javascript
jquery 3D球状导航的文章分类
Jul 06 Javascript
认识jQuery的Promise的具体使用方法
Oct 10 jQuery
Angular Renderer (渲染器)的具体使用
May 03 Javascript
详解webpack4升级指南以及从webpack3.x迁移
Jun 12 Javascript
小程序开发基础之view视图容器
Aug 21 Javascript
Mint UI实现A-Z字母排序的城市选择列表
Dec 28 Javascript
详解Vue.directive 自定义指令
Mar 27 Javascript
JavaScript 处理树数据结构的方法示例
Jun 16 Javascript
防止Layui form表单重复提交的实现方法
Sep 10 Javascript
layui富文本编辑器前端无法取值的解决方法
Sep 18 Javascript
微信小程序实现底部弹出模态框
Nov 18 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
对比分析php中Cookie与Session的异同
2016/02/19 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
PJ Blog修改-禁止复制的代码和方法
2006/10/25 Javascript
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
应届生财务管理求职信
2013/11/06 职场文书
任课老师推荐信范文
2013/11/24 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
消防安全宣传标语
2014/06/07 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
2019年入党思想汇报
2019/03/25 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
Python多个MP4合成视频的实现方法
2021/07/16 Python
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript