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 23 Javascript
jquery 面包屑导航 具体实现
Jun 05 Javascript
为jQuery添加Webkit的触摸的方法分享
Feb 02 Javascript
Js实现无刷新删除内容
Apr 29 Javascript
自己动手写的jquery分页控件(非常简单实用)
Oct 28 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
Feb 27 Javascript
基于node实现websocket协议
Apr 25 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
May 11 Javascript
基于JavaScript实现购物网站商品放大镜效果
Sep 06 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
Nov 17 Javascript
在微信小程序中使用mqtt服务的方法
Dec 13 Javascript
JavaScript实现简单计算器功能
Dec 19 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&java(一)
2006/10/09 PHP
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
解析php中const与define的应用区别
2013/06/18 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
JS获取整个页面文档的实现代码
2011/12/15 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
简单的Apache+FastCGI+Django配置指南
2015/07/22 Python
让python在hadoop上跑起来
2016/01/27 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
Python单元测试与测试用例简析
2019/11/09 Python
Python实现GIF图倒放
2020/07/16 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
幼儿园教师工作感言
2014/02/15 职场文书
商铺租赁意向书
2014/04/01 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
车辆挂靠协议书
2016/03/23 职场文书