详解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 相关文章推荐
实现变速回到顶部的JavaScript代码
May 09 Javascript
遍历jquery对象的代码分享
Nov 02 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
Apr 07 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
js事件处理程序跨浏览器解决方案
Mar 27 Javascript
辨析JavaScript中的Undefined类型与null类型
May 26 Javascript
Javascript实现信息滚动效果
May 18 Javascript
Webpack实战加载SVG的方法
Dec 26 Javascript
vue awesome swiper异步加载数据出现的bug问题
Jul 03 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
Aug 01 Javascript
详解Vue CLI3配置解析之css.extract
Sep 14 Javascript
原生js实现的金山打字小游戏(实例代码详解)
Mar 16 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
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
原生js实现图片轮播特效
2015/12/18 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
webpack4简单入门实例
2018/09/06 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
vue实现选中效果
2020/10/07 Javascript
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python实现文件复制删除
2016/04/19 Python
python生成式的send()方法(详解)
2017/05/08 Python
python实现画一颗树和一片森林
2018/06/25 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
大学生素质拓展活动方案
2014/02/11 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
Python中for后接else的语法使用
2021/05/18 Python
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers