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深入理解js闭包
Jul 03 Javascript
Jquery异步请求数据实例代码
Dec 28 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
Nov 25 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
Apr 08 Javascript
node.js中Socket.IO的进阶使用技巧
Nov 04 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
Jan 09 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
Apr 07 Javascript
Node.js中npm常用命令大全
Jun 09 Javascript
js与applet相互调用的方法
Jun 22 Javascript
灵活使用数组制作图片切换js实现
Jul 28 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
Aug 07 Javascript
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
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图形操作之Jpgraph学习笔记
2015/12/25 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
javascript 数组排序函数
2009/08/20 Javascript
javascript利用初始化数据装配模版的实现代码
2010/11/17 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
js简单实现自动生成表格功能示例
2020/06/02 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
数学系毕业生的自我评价
2014/01/10 职场文书
母亲节感恩寄语
2014/02/21 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
实习推荐信格式模板
2015/03/27 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server
php去除数组中为0的元素的实例分析
2021/11/17 PHP
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server