JavaScript 如何在浏览器中使用摄像头


Posted in Javascript onDecember 02, 2020

1.获得摄像头权限(本文使用chrome)

首先确保你运行以下js所在的url是https协议的或者localhost的:

const constrains = {
   video: true,
   audio: true
  }
 navigator.mediaDevices.getUserMedia(constrains)
  .then(stream => {
   console.log('得到stream的类型是MediaStream')
  })
  // 在一些老的浏览器上的话:
  // navigator.webkitGetUserMedia
  // navigator.mozGetUserMedia

之后你的浏览器会有弹出框,告诉你你的浏览器想要访问camera,问你是否允许。
此外,这里的constrains可以设置分辨率的最小、理想和最大值,还可以在手机端通过设置facingMode来控制摄像头的方向等。

2.将得到的stream:MediaStream给video, camera实现直播效果

const video = document.createElement('video');
 //document.body.appendChild(video)
 const constrains = {
   video: true,
   audio: true
  }
 navigator.mediaDevices.getUserMedia(constrains)
  .then(stream => {
  video.srcObject = stream;
  video.play();
  })

此时video将播放camera实时录制下来的内容

3.照相

// 展示相片的image标签
 const image = document.createElement('image')
 // canvas会读取video中的内容,然后输出(有点类似于给video截图)
 const canvas = document.createElement('canvas')
 const video = document.getElementById('video');
 const context = canvas.getContext('2d')
 context.drawImage(video, 0, 0, canvas.height, canvas.width)
 // 此时将canvas生成的图片转换成一个data url
 const url = canvas.toDataURL()
 image.src = url

4.录像

需要在2.MediaStream给video的基础上做些修改

const constrains = {
   video: true,
   audio: true
  }
 let mediaRecorder
 navigator.mediaDevices.getUserMedia(constrains)
  .then(stream => {
  mediaRecorder = new MediaRecorder(stream)
  })
 
 startRecord() {
  mediaRecorder.start()
  mediaRecorder.ondataavailable = e => {
   chunks.push(e.data)
  }
 }

 stopRecord() {
  mediaRecorder.stop()
  return new Promise(resolve => {
   mediaRecorder.onstop = e => {
    const blob = new Blob(chunks, { type: 'video/ogg; codecs=opus' })
    const audioURL = window.URL.createObjectURL(blob)
    resolve(audioURL)
   }
  })
 }

 // video标签用来展示录制下来的内容
 const video = document.createElement('video');
 //document.body.appendChild(video)

 // 开始录像
 startRecord()

 // do something....,比方说这里搞两个button、一个开始录影,一个结束录影

 // 结束录影
 stopRecord().then(videoUrl => {
  video.src = videoUrl
 })
 // 此时video标签的内容就是你录制下来的内容。

以上就是JavaScript 如何在浏览器中使用摄像头的详细内容,更多关于JavaScript 浏览器使用摄像头的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JavaScript库 开发规则
Jan 31 Javascript
写给想学习Javascript的朋友一点学习经验小结
Nov 23 Javascript
Textarea根据内容自适应高度
Oct 28 Javascript
javascript拖拽上传类库DropzoneJS使用方法
Dec 05 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
Jan 08 Javascript
浅谈jquery中delegate()与live()
Jun 22 Javascript
分享我的jquery实现下拉菜单心的
Nov 29 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
Jun 17 Javascript
JS 实现 ajax 异步浏览器兼容问题
Jan 21 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
Jul 06 Javascript
vue 项目接口管理的实现
Jan 17 Javascript
微信小程序自定义多列选择器使用详解
Jun 21 Javascript
vue3.0+vue-router+element-plus初实践
Dec 02 #Vue.js
JavaScript实现简单动态表格
Dec 02 #Javascript
JavaScript实现10秒后再次获取验证码
Dec 02 #Javascript
JavaScript实现网页跨年倒计时
Dec 02 #Javascript
JavaScript async/await原理及实例解析
Dec 02 #Javascript
通过实例解析js可枚举属性与不可枚举属性
Dec 02 #Javascript
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 #Vue.js
You might like
如何对PHP程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
PHP 七大优势分析
2009/06/23 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
JS实现弹性菜单效果代码
2015/09/07 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
js运动事件函数详解
2016/10/21 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
Django中modelform组件实例用法总结
2020/02/10 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
什么是View State?
2013/01/27 面试题
优秀老师事迹材料
2014/02/05 职场文书
服装店营销方案
2014/03/10 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
升学宴演讲稿
2014/09/01 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
培训心得体会怎么写
2016/01/25 职场文书
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
java中用float时,数字后面加f,这样是为什么你知道吗
2021/09/04 Java/Android