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实现权限树的更新权限时的全选全消功能
Feb 17 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
Dec 18 Javascript
JavaScript对象的property属性详解
Apr 01 Javascript
JS替换字符串中空格方法
Apr 17 Javascript
jQuery实现给页面换肤的方法
May 30 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
Oct 21 Javascript
AnjularJS中$scope和$rootScope的区别小结
Sep 18 Javascript
原生JS取代一些JQuery方法的简单实现
Sep 20 Javascript
详解jQuery lazyload 懒加载
Dec 19 Javascript
js仿网易表单及时验证功能
Mar 07 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
Dec 18 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
Jul 16 jQuery
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
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
在PWS上安装PHP4.0正式版
2006/10/09 PHP
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
研修第一天随笔感言
2014/02/15 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
招商引资工作汇报
2014/10/28 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
浅谈Python中对象是如何被调用的
2022/04/06 Python