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 相关文章推荐
ExtJs之带图片的下拉列表框插件
Mar 04 Javascript
javascript (用setTimeout而非setInterval)
Dec 28 Javascript
js单例模式详解实例
Nov 21 Javascript
js实现的简单radio背景颜色选择器代码
Aug 18 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
Jan 05 Javascript
js模拟微博发布消息
Feb 23 Javascript
vue2.0 axios跨域并渲染的问题解决方法
Mar 08 Javascript
详解如何在你的Vue项目配置vux
Jun 04 Javascript
Vue中div contenteditable 的光标定位方法
Aug 25 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
Apr 14 Javascript
vue相关配置文件详解及多环境配置详细步骤
May 19 Javascript
解析原生JS getComputedStyle
May 25 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封装好的人民币数值转中文大写类
2015/12/20 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
Jquery replace 字符替换实现代码
2010/12/02 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
Node.js 路由的实现方法
2019/06/05 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
jquery实现聊天机器人
2020/02/08 jQuery
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
使用SAE部署Python运行环境的教程
2015/05/05 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
Python更换pip源方法过程解析
2020/05/19 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
2014端午节活动策划方案
2014/01/27 职场文书
超市客服工作职责
2014/06/11 职场文书
环境保护标语
2014/06/20 职场文书
装修施工安全责任书
2014/07/24 职场文书
团队拓展活动方案
2014/08/28 职场文书
2014年教研组工作总结
2014/11/26 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
第一节英语课开场白
2015/06/01 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python