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 相关文章推荐
基于jquery的让页面控件不可用的实现代码
Apr 27 Javascript
IE6/7/8/9不支持exec的简写方式
May 25 Javascript
关于jQuery的inArray 方法介绍
Oct 08 Javascript
javascript实现限制上传文件大小
Feb 06 Javascript
jQuery中dom元素上绑定的事件详解
Apr 24 Javascript
基于JavaScript实现移动端TAB触屏切换效果
Oct 20 Javascript
浅谈String.valueOf()方法的使用
Jun 06 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
Jul 19 Javascript
localStorage实现便签小程序
Nov 28 Javascript
ES6中module模块化开发实例浅析
Apr 06 Javascript
浅谈vue-lazyload实现的详细过程
Aug 22 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
Sep 24 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
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
php探针不显示内存解决方法
2019/09/17 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
详解AngularJS中的作用域
2015/06/17 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
js实现小星星游戏
2020/03/23 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
python写的一个squid访问日志分析的小程序
2014/09/17 Python
理解Python垃圾回收机制
2016/02/12 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
Python 窗体(tkinter)按钮 位置实例
2019/06/13 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
python实现在线翻译功能
2020/03/03 Python
python字符串判断密码强弱
2020/03/18 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
2014年关工委工作总结
2014/11/17 职场文书
小班上学期个人总结
2015/02/12 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
java设计模式--七大原则详解
2021/07/21 Java/Android