js实现web调用摄像头 js截取视频画面


Posted in Javascript onApril 21, 2019

本文实例为大家分享了JS实现截取视频画面的具体代码,供大家参考,具体内容如下

Html

<p>
 <button onclick="openMedia()">打开</button>
 <button onclick="closeMedia()">关闭</button>
 <button onclick="drawMedia()">截取</button>
</p>
<video id="video" class="bg"></video>
<canvas id="qr-canvas"></canvas>

Javascript

<script type="text/javascript">
 var video = document.querySelector('video');
 var text = document.getElementById('text');
 var canvas1 = document.getElementById('qr-canvas');
 var context1 = canvas1.getContext('2d');
 var mediaStreamTrack;

 // 一堆兼容代码
 window.URL = (window.URL || window.webkitURL || window.mozURL || window.msURL);
 if (navigator.mediaDevices === undefined) {
 navigator.mediaDevices = {};
 }
 if (navigator.mediaDevices.getUserMedia === undefined) {
 navigator.mediaDevices.getUserMedia = function(constraints) {
  var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
  if (!getUserMedia) {
  return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
  }
  return new Promise(function(resolve, reject) {
  getUserMedia.call(navigator, constraints, resolve, reject);
  });
 }
 } 

 //摄像头调用配置
 var mediaOpts = {
 audio: false,
 video: true,
 video: { facingMode: "environment"} // 或者 "user"
 // video: { width: 1280, height: 720 }
 // video: { facingMode: { exact: "environment" } }// 或者 "user"
 }

 // 回调
 function successFunc(stream) {
 mediaStreamTrack = stream;
 video = document.querySelector('video');
 if ("srcObject" in video) {
  video.srcObject = stream
 } else {
  video.src = window.URL && window.URL.createObjectURL(stream) || stream
 }
 video.play();
 }
 function errorFunc(err) {
 alert(err.name);
 }

 // 正式启动摄像头
 function openMedia(){
 navigator.mediaDevices.getUserMedia(mediaOpts).then(successFunc).catch(errorFunc);
 }

 //关闭摄像头
 function closeMedia(){
 mediaStreamTrack.getVideoTracks().forEach(function (track) {
  track.stop();
  context1.clearRect(0, 0,context1.width, context1.height);//清除画布
 });
 }

 //截取视频
 function drawMedia(){
 canvas1.setAttribute("width", video.videoWidth);
 canvas1.setAttribute("height", video.videoHeight);
 context1.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
 }

</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
深入了解Node.js中的一些特性
Sep 25 Javascript
node.js中的path.sep方法使用说明
Dec 08 Javascript
EasyUI实现二级页面的内容勾选的方法
Mar 01 Javascript
判断访客终端类型集锦
Jun 05 Javascript
JavaScript制作弹出层效果
Dec 02 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
Dec 05 Javascript
浅谈Javascript中的Label语句
Dec 14 Javascript
jQuery实现用户信息表格的添加和删除功能
Sep 12 jQuery
vue-cli 自定义指令directive 添加验证滑块示例
Oct 19 Javascript
JavaScript常用数学函数用法示例
May 14 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
Aug 12 Javascript
vue 防止页面加载时看到花括号的解决操作
Nov 09 Javascript
今天,小程序正式支持 SVG
Apr 20 #Javascript
详解Vue中组件的缓存
Apr 20 #Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
Apr 20 #Javascript
优雅地使用loading(推荐)
Apr 20 #Javascript
详解JavaScript的数据类型以及数据类型的转换
Apr 20 #Javascript
详解key在Vue列表渲染时究竟起到了什么作用
Apr 20 #Javascript
函数式编程入门实践(一)
Apr 20 #Javascript
You might like
使用字符串函数输出整数化的PHP版本号
2006/10/09 PHP
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
功能强大的php分页函数
2016/07/20 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
javascript 表单的友好用户体现
2009/01/07 Javascript
JavaScript Timer实现代码
2010/02/17 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
python列表与元组详解实例
2013/11/01 Python
跟老齐学Python之编写类之三子类
2014/10/11 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
python创造虚拟环境方法总结
2019/03/04 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
上海方立数码笔试题
2013/10/18 面试题
私人会所最新创业计划书范文
2014/03/24 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
会议欢迎词
2015/01/23 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang