详解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 数据类型转换总结笔记
Jan 17 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
Aug 29 Javascript
文本框回车提交与禁止提交示例
Sep 27 Javascript
JavaScript中instanceof运算符的使用示例
Jun 08 Javascript
两行代码轻松搞定JavaScript日期验证
Aug 03 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
Jan 17 Javascript
HTML中使背景图片自适应浏览器大小实例详解
Apr 06 Javascript
JS中的数组转变成JSON格式字符串的方法
May 09 Javascript
JavaScript反弹动画效果的实现代码
Jul 13 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
Jul 17 Javascript
js计算两个日期间的天数月的实例代码
Sep 20 Javascript
在vue中使用v-bind:class的选项卡方法
Sep 27 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开发GUI
2006/10/09 PHP
PHP采集相关教程之一 CURL函数库
2010/02/15 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
php whois查询API制作方法
2011/06/23 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
python根据京东商品url获取产品价格
2015/08/09 Python
python os模块简单应用示例
2019/05/23 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
小学社会实践活动总结
2014/07/03 职场文书
先进事迹演讲稿
2014/09/01 职场文书
新闻稿格式范文
2015/07/18 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
人生感悟经典句子
2019/08/20 职场文书
利用JavaScript写一个简单计算器
2021/11/27 Javascript
python中数组和列表的简单实例
2022/03/25 Python