详解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 相关文章推荐
一实用的实现table排序的Javascript类库
Sep 12 Javascript
在多个页面使用同一个HTML片段的代码
Mar 04 Javascript
jquery 操作日期、星期、元素的追加的实现代码
Feb 07 Javascript
jQuery操作input值的各种方法总结
Nov 21 Javascript
Javascript变量的作用域和作用域链详解
Apr 02 Javascript
jQuery对象与DOM对象转换方法详解
May 10 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
Aug 15 Javascript
JavaScript中变量、指针和引用功能与操作示例
Aug 04 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 Javascript
在Webpack中用url-loader处理图片和字体的问题
Apr 28 Javascript
微信小程序仿抖音短视频切换效果的实例代码
Jun 24 Javascript
jQuery实现评论模块
Aug 19 jQuery
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获取操作系统语言代码
2013/11/04 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
python实现简易内存监控
2018/06/21 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
这段代码难道不该打印出56吗
2013/02/27 面试题
《孔子游春》教学反思
2014/02/25 职场文书
保险经纪人求职信
2014/03/11 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
投标诚信承诺书
2014/05/26 职场文书
就业推荐表导师评语
2014/12/31 职场文书
《鲸》教学反思
2016/02/23 职场文书
php png失真的原因及解决办法
2021/10/24 PHP
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA