JS 允许通过 navigator.mediaDevices.getUserMedia(options) 直接调用本地的设备,比如麦克风,摄像头等。因为该操作涉及到用户隐私,所以调用的时候会弹框请求权限。

该操作返回一个 Promise 对象,如果调用成功,会resolve 并返回一个 MediaStream 对象给回调函数:

 const options = {
audio: true //调用本地麦克风
video: true //调用本地摄像头
}
navigator.mediaDevices.getUserDevice(options).then(stream => {
audio.srcObject = stream;
audio.onloadedmetadata = () => {
audio.play();
}
})

如果用户拒绝使用麦克风或者摄像头权限,则会reject该请求:

 navigator.mediaDevices.getUserDevice(options).then(stream => {
...
}).catch(error => {
// 如果用户拒绝权限请求,或者找不到对应的设备,会被catch到
})

当使用摄像头的时候,还可以自定义相机的分辨率:

 const options = {
video: {
width: 1280,
height: 720
}
}

也可以通过指定min、max、ideal 来设置最小、最大以及理想的分辨率,但是需要注意的是如果满足该参数,比如摄像头的最大分辨率是1280*760,但此时设置的height 属性最小分辨率为730,就会抛出 OverconstrainedError ,所以设置自定义参数的时候需要考虑设备是否能满足。

此时有人可能会问,如果我有多个摄像头,对,就是说手机,那调用的是哪一个呢?

当我们指定video的ideal属性的时候,这个优先级最高,系统会默认寻找最接近该值的摄像头。但是我们也可以自己指定手机上是使用前置还是后置的摄像头:

 const isUseFront = true;
const options = {
video: {
facingMode: isUseFront ? 'user' : 'environment'
}
}

需要注意的是不是所有的浏览器都支持该API,比如反人类的IE,所以使用的时候还是需要考虑到兼容性的问题。

该API只能通过获取设备使用权,但是无法获取到具体的数据,比如音频数据。当我们需要实时获取到音频输入数据并进行对应操作的时候,这个API还无法满足我们的需求,这时候就需要另一个API:AudioContext 来对音频数据进行操作。对于AudioContext,目前还处于学习阶段,过段时间会有后续更新,敬请期待!

JS调用本地设备的更多相关文章

  1. js调用本地程序

    前几天,做项目时候用到js调用本地的程序,找了好多资料,一种是写入注册表,一种是写一个浏览器插件,相对来说,写一个注册表更简单一点,因为需求很紧.下面就是我的总结,希望可以对你们有所帮助,具体从哪里找 ...

  2. 【Web前端】---js调用本地应用程序

    最近进入了一个项目组,向大牛们一起学习如何搞开发,可谓是边开发边学习.就在前两天,我们的项目被领导们验收了一次,顺便给我们提了点新的需求,要求我们能够使用外在设备拍照上传.君要臣死,臣不能不死.更何况 ...

  3. PC网页js调用本地应用程序

    最近要现实一个在PC网页中实现点击按钮调用本地应用程序的功能 其实实现原理也非常简单, 首先注册一个本地注册表文件,指向本地应用程序路径 其次在网页中用js指向这个注册表文件,就可以实现网页调用本地应 ...

  4. js调用本地office打开服务器的office文件预览

    本来是想做成直接在网页上在线预览office文件的,但是找了好多,要不是收费,要不就是要调用别人的API不安全,所以纠结了好久还是用调用本地的office预览office文件. 废话不多说,那么怎么调 ...

  5. Js调用本地exe的方式

    1.     使用记事本(或其他文本编辑器)创建一个myprotocal.reg文件,并写入以下内容 Windows Registry Editor Version 5.00 [HKEY_CLASSE ...

  6. js调用本地 exe

      js方法 function Run(strPath) //only for ie { try { var objShell = new ActiveXObject("wscript.sh ...

  7. JS调用本地应用程序

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  8. 使用JS启动本地应用程序、屏幕键盘

    问题描述:     现在希望在Web端使用JS调用本地应用程序 问题解决:   (1)使用JS启动本地应用程序 使用上述代码重点是创建了一个ActiveXObject的对象     参考说明:     ...

  9. JS方式调用本地的可执行文件

    看到一个方法,有些用,先存下来,有用的时候再用. 前几天,在IE,FIREFOX中实现了用JS方式调用本地的可执行文件.地址:www.yihaomen.com/article/js/211.htm , ...

随机推荐

  1. sunset

    may there be enough clouds in your life to make a beautiful sunset

  2. go安装和开发工具安装

    go适合做什么 l 服务端开发 l 分布式系统 l 网络编程 l 区块链开发 l 内存KV数据库,例如boltDB.levelDB l 云平台 一 go安装 官网:https://golang.goo ...

  3. Vue打包npm run build 打包后空白怎么解决?

    问题一:路径报错并且页面空白 解决:buld/index.js      assetsPublicPath: '/'修改为 assetsPublicPath: './' 问题二:没报错页面空白  ro ...

  4. 简单测试 Kotlin native 性能

    准备 一直使用kotlin JVM平台开发服务器的应用,最近想试试看 Kotlin native的性能. 我使用的是 kotlin native 1.3.21,要使用他非常的简单,下载最新的 IDEA ...

  5. css 积累

    1.input 初始化 input { -webkit-tap-highlight-color: rgba(0,0,0,0); border: none; } input:focus { outlin ...

  6. 笔记《JavaScript 权威指南》(第6版) 分条知识点概要1—词法结构

    [词法结构]字符集.注释.直接量.标识符和保留字.可选的分号 [字符集] JavaScript程序是用Unicode字符集编写的. Unicode是ASCII和Latin-1的超集,支持地球上几乎所有 ...

  7. Oracle单机Rman笔记[2]---RMAN基础介绍

    A.DBA对于备份恢复的问题: 1.在数据库发生故障时,丢失多少数据是可承受的? 2.恢复数据库时,能够忍受的最长时间多少? 3.为了确保您的数据能够被恢复,愿意投入多少成本? 4.备份期间可以关闭系 ...

  8. StringUtils.defaultIfBlank

    StringUtils.defaultIfBlank在字符串为null,空串或者空白串的时候,返回指定的默认值. org.apache.commons.lang.StringUtils default ...

  9. 关于SQLSERVER数据库连接池

    页内导航 1.如何开启连接池? 2. 那连接池是和有什么有关呢? 3.如何使用相同的连接池访问不同的数据库? ‘关于数据库连接池大家都听说过或者用过,但真正的了解有多少呢? 数据连接池如何启用?有哪些 ...

  10. 用jackson包实现json、对象、Map之间的转换

    jackson API的使用 用jackson包实现json.对象.Map之间的转换