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 相关文章推荐
js或css实现滚动广告的几种方案
Jan 28 Javascript
JavaScript生成随机数的4种自定义函数分享
Feb 28 Javascript
Javascript中Array用法实例分析
Jun 13 Javascript
tuzhu_req.js 实现仿百度图片首页效果
Aug 11 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
bootstrap datetimepicker控件位置异常的解决方法
Nov 23 Javascript
JS扩展String.prototype.format字符串拼接的功能
Mar 09 Javascript
vue-router的HTML5 History 模式设置
Sep 08 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
Apr 26 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
Jul 23 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
Jan 05 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
深入了解php4(2)--重访过去
2006/10/09 PHP
php 可变函数使用小结
2018/06/12 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
javascript基于DOM实现权限选择实例分析
2015/05/14 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
jQuery实现穿梭框效果
2021/01/19 jQuery
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
Python中字典映射类型的学习教程
2015/08/20 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
对python中的pop函数和append函数详解
2018/05/04 Python
Python实现的读写json文件功能示例
2018/06/05 Python
python如何查看微信消息撤回
2018/11/27 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
PyTorch实现AlexNet示例
2020/01/14 Python
Python定时器线程池原理详解
2020/02/26 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
2015/11/18 面试题
协议书范本
2014/04/23 职场文书
学历证明样本
2015/06/16 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis
Python中使用subprocess库创建附加进程
2021/05/11 Python
浅谈Python类的单继承相关知识
2021/05/12 Python
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python