JavaScript 如何在浏览器中使用摄像头

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 浏览器使用摄像头的资料请关注我们其它相关文章!

(0)

相关推荐

  • 如何用JavaScript检测当前浏览器是无头浏览器

    什么是无头浏览器(headless browser)? 无头浏览器是指可以在图形界面情况下运行的浏览器.我可以通过编程来控制无头浏览器自动执行各种任务,比如做测试,给网页截屏等. 为什么叫"无头"浏览器? "无头"这个词来源于最初的"无头计算机(Headless computer)".维基百科关于的"无头计算机"词条: 无头系统(headless system)是指已配置为无须显示器(即"头").键盘和鼠标

  • JavaScript实现浏览器网页自动滚动并点击的示例代码

    1. 打开浏览器控制台窗口 JavaScript通常是作为开发Web页面的脚本语言,本文介绍的JavaScript代码均运行在指定网站的控制台窗口.一般浏览器的开发者窗口都可以通过在当前网页界面按F12快捷键调出,然后在上面的标签栏找到Console点击就是控制台窗口,在这里可以直接执行JavaScript代码,而chrome系浏览器的控制台界面可以使用快捷键Ctrl+Shift+J直接打开 2. 实时查看鼠标坐标 首先为了获取当前的鼠标位置的x.y坐标,需要先重写一个onmousemove函数

  • JS跨浏览器解析XML应用过程详解

    首先介绍简单的理论: 对于XML,我们可以理解它是一种树结构,它包含根,元素,属性,文本等内容.不同浏览器都有自己的解析器,把XML读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象. 微软的 XML 解析器与其他浏览器中的解析器是有差异的.微软的解析器支持对 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器.不过,所有的解析器都含有遍历 XML 树.访问.插入及删除节点的函数. 如果你使用的是一个本地文件或者网络文件且该文件在是在本服务器,

  • JavaScript 判断浏览器是否是IE

    作为一个前端,避免不了会遇见IE的坑,其他浏览器都好好的,测到IE就完蛋,各种不支持,服气了 有些属性和方法是所有版本IE都不支持,而有些则是部分支持,在项目中能够,主要分界岭为IE8,我相信目前大部分在维护和开发的项目,都是支持到IE8及已上版本即可,那么这篇文章,粗浅的总结一下,如何判断浏览器是IE及版本是8.0 首先,有些属性和方法是所有版本IE都不支持,那么只需要判断是否是IE即可 以下三种是我在项目中,用到的方法,如有新的方法,会更新,若大家有其他更好的方法,还望不吝赐教~~ docu

  • 浏览器JavaScript调试功能无法使用解决方案

    前言 小编最近刚刚接手一个项目,里面几乎用到了BS项目中所有的知识,从原先的VS环境的调试,转移到了网页F12的调试模式,正因如此,小编在使用VS2017工具时,运行并调试 .aspx文件时,出现的问题,接下来小编具体的来说一说这种情况. 无法调试 小编使用F5进行调试时,总是会出现这样的界面,而且还报错无窗口,如下所示,图一(网页中出现的界面) 紧接着VS2017中,出现图二的错误 解决问题 方法很简单,小编上网搜索了一下,发现了下面的解决方案 1.打开vs2017中的工具-->选项-->调

  • 基于js实现判断浏览器类型代码实例

    前言 工作中需要用到判断浏览器类型,网上找到的内容不怎么全,故在此进行一下总结. 一.不同浏览器及版本下User-Agent信息 待续.....欢迎补充 二.根据User-Agent信息进行判断 以下代码目前还判断不了win10下的edge //判断是否是IE浏览器 function isIE() { var b = navigator.userAgent; var isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera浏览器

  • JavaScript常用工具函数汇总(浏览器环境)

    前端业务中比较常用的JavaScript工具函数,浏览器环境常用,可直接拷贝在项目里使用.这里统一整理,方便查阅,本文章会持续更新. 一.file转为base64 /** * file转为base64 * @param {*} file file对象 * @param {*} callback */ export const fileToDataURL = (file, callback) => { let freader = new FileReader(); freader.readAsDa

  • 如何使用 JavaScript 操作浏览器历史记录 API

    History 是 window 对象中的一个 JavaScript 对象,它包含了关于浏览器会话历史的详细信息.你所访问过的 URL 列表将被像堆栈一样存储起来.浏览器上的返回和前进按钮使用的就是 history 的信息. History 对象包含长度属性,它包含了会话历史记录栈中的 URL 数量.例如,如果用户在浏览器中打开一个标签页,历史记录的长度将是 1(新的标签页也是一个网页).然后用户输入一个网址 foo.com 并点击回车,现在历史记录对象的长度将是 2, 用户转到其他页面 bar

  • NodeJS和浏览器中this关键字的不同之处

    前言 学习过JavaScript的人肯定清楚 处在不同环境下this的指向问题.那么看下面的代码 var type = 1 function toWhere(){ this.type = 2; } toWhere(); console.log(type) 你们肯定会这样想: 这里声明了一个全局变量type,当执行type=1的时候,赋值为1.之后toWhere函数调用,看到函数中有this 就去判断this的指向,这里很清楚,this指向了window,this.type=2执行后,全局变量ty

  • 手机浏览器唤起微信分享(JS)

    最近在做一个手机站,要求点击分享可以直接打开微信分享出去.而不是jiathis,share分享这种的点击出来二维码.在网上看了很多,都说APP能唤起微信,手机网页实现不了.也找了很多都不能直接唤起微信. 总结出来一个可以直接唤起微信的.适应手机qq浏览器和uc浏览器. 下面上代码,把这些直接放到要转发的页面里就可以了: html部分: <script src="mshare.js"></script>//引进mshare.js <button data-m

随机推荐