概览

mediaDevices 是 Navigator 对象的只读属性,一个单列对象,可以连接访问相机和麦克风,屏幕共享等媒体输入设备

方法

enumerateDevices

请求一个可用的媒体输入和输出设备列表,如麦克风、相机、耳机等。返回的 Promise完成状态中是一个带有 MediaDeviceInfo 的数组

let mediaDevices = navigator.mediaDevices

if(!mediaDevices || !mediaDevices.enumerateDevices) return console.erorr('浏览器不支持enumerateDevices API')

navigator.mediaDevices.enumerateDevices()

.then((devices)=>{

for (let device of devices){

console.log(device.kind + ': ' +device.lable + ' id = '+ device.deviceId );

}

})

.catch(err=>{

console.error(err)

})

/*

audioinput: undefined id = default

audioinput: undefined id = communications

audioinput: undefined id = ac67d348685a08c75e5017f9a449b3d85f08dcb774c88ab95de82bbf2c0fc820

videoinput: undefined id = e41039bcfbc84d926a0b73cdc1d8b1daf3d67d36c62588202191d918fb076426

audiooutput: undefined id = default

audiooutput: undefined id = communications

audiooutput: undefined id = 015d73652e57bffb21679b937675d32c4d4a43862aba3774aaf0b5f1e983151f

*/

兼容性

getSupportedConstraints

返回一个 MediaTrackSupportedConstraints 对象,其属性都是客户端所支持约束的属性,值为 Boolean 类型

let supportedConstraints = navigator.mediaDevices.getSupportedConstraints()

for (let constraint of Object.keys(supportedConstraints)){

console.log(constraint)

}

/*

aspectRatio

autoGainControl

brightness

channelCount

colorTemperature

contrast

deviceId

echoCancellation

exposureCompensation

exposureMode

exposureTime

facingMode

focusDistance

focusMode

frameRate

groupId

height

iso

latency

noiseSuppression

pointsOfInterest

resizeMode

sampleRate

sampleSize

saturation

sharpness

torch

volume

whiteBalanceMode

width

zoom

*/

兼容性

getDisplayMedia

提示用户选择和授予权限来捕获显示或部分的内容,(如分屏共享时分享哪一屏的内容)然后使用 medieaStream Recording API 记录生成的 stream,或作为 webRTC 会话的一部分进行传输。

async function startCapture(displayMediaOptions) {

let captureStream = null;

try {

captureStream = await navigator.mediaDevices.getDisplayMedia(displayMediaOptions);

} catch(err) {

console.error("Error: " + err);

}

return captureStream;

}

兼容性

getUserMedia

提示用户给予使用媒体输入的许可(如麦克风,摄像机),当媒体输入时产生一个 mediaStream包含所请求的媒体类型的轨道。该流可以包括视频轨道(摄像机,视频记录设备,共屏等硬件或虚拟视频流源)、音频轨道(来自麦克风、A/D转换器等硬件或虚拟音频源),也可能是其它轨道类型

该方法返回一个Promise对象,成功时 resolve 回调函数带有mediaStream对象。如果用户拒绝授予使用权限,或是媒体源不可用,则返回 reject回调

** Promise 可能既不会 resolve 也不会reject,因为用户不必做出选择,可能只是忽略请求**

// 想要获取一个最接近 1280x720 的相机分辨率

let constraints = { audio: true, video: { width: 1280, height: 720 } };

navigator.mediaDevices.getUserMedia(constraints)

.then(function(mediaStream) {

let video = document.querySelector('video');

video.srcObject = mediaStream;

video.onloadedmetadata = function(e) {

video.play();

};

})

.catch(function(err) { console.log(err.name + ": " + err.message); });

参数 constraints

一个mediaStreamConstraints对象指定请求的媒体类型和相对应参数,该对象包含 video 和 audio 两个属性,必须一个或两个同时被指定,如果无法找到指定的媒体类型或无法满足对于的参数要求,Promise将返回 rejected

参数配置

1

{audio:true,video:true}

属性设置为 Truthy 则生成的stream 必须具有该类型的轨道,否则调用 getUserMedia会抛出错误

2

{

audio: true,

video: { width: 1280, height: 720 }

}

表示video的分辨率应为 1280x720 浏览器将试着满足这个请求参数,如果无法满足要求或选择覆盖,则可能返回其它的分辨率

3

{

audio: true,

video: {

width: { min: 1280 },

height: { min: 720 }

}

}

此配置要求了最低分辨率,如果达不到要求,promise 将返回 reject;还可配置 max、exact(min == max),而且用户将不会得到要求授权的提示

4

{

audio: true,

video: {

width: { min: 1024, ideal: 1280, max: 1920 },

height: { min: 776, ideal: 720, max: 1080 }

}

}

如果使用ideal,浏览器将尝试找到(如果相机有多个的话)最接近指定值的理想值的设备或相机

意味着上方的第一个分辨率例子可简写为:

{

audio: true,

video: {

width: { ideal: 1280 },

height: { ideal: 720 }

}

}

5

并不是所有的 constraint 都说数字,如在移动设备上优先使用前置相机

{ audio: true, video: { facingMode: "user" } }

强制使用后置相机

{ audio: true,

video: {

facingMode: { exact: "environment" }

}

}

APP权限配置

"permissions": {

"audio-capture": {

"description": "Required to capture audio using getUserMedia()"

},

"video-capture": {

"description": "Required to capture video using getUserMedia()"

}

}

作为可能涉及重大隐私问题的API,getUserMedia()规范规定了浏览器有义务满足的各种隐私和安全要求。

getUserMedia()是一个强大的功能,只能在安全的环境中使用; 在不安全的情境中,navigator.mediaDevices 是undefined,阻止访问getUserMedia()。

简而言之,安全上下文是使用HTTPS或 file:///URL 方案加载的页面,或者是从中加载的页面localhost。

在旧的浏览器中使用新的API

推荐使用处理了约束的 adapter.jspolyfill 来替代。

// 老的浏览器可能根本没有实现 mediaDevices,所以我们可以先设置一个空的对象

let mediaDevices = navigator.mediaDevices

if (mediaDevices === undefined) {

mediaDevices = {};

}

// 一些浏览器部分支持 mediaDevices。我们不能直接给对象设置 getUserMedia

// 因为这样可能会覆盖已有的属性。这里我们只会在没有getUserMedia属性的时候添加它。

if (mediaDevices.getUserMedia === undefined) {

mediaDevices.getUserMedia = function(constraints) {

// 首先,如果有getUserMedia的话,就获得它

var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

// 一些浏览器根本没实现它 - 那么就返回一个error到promise的reject来保持一个统一的接口

if (!getUserMedia) {

return Promise.reject(new Error('getUserMedia is not implemented in this browser'));

}

// 否则,为老的navigator.getUserMedia方法包裹一个Promise

return new Promise(function(resolve, reject) {

getUserMedia.call(navigator, constraints, resolve, reject);

});

}

}

mediaDevices.getUserMedia({ audio: true, video: true })

.then(function(stream) {

var video = document.querySelector('video');

// 旧的浏览器可能没有srcObject

if ("srcObject" in video) {

video.srcObject = stream;

} else {

// 防止在新的浏览器里使用它,应为它已经不再支持了

video.src = window.URL.createObjectURL(stream);

}

video.onloadedmetadata = function(e) {

video.play();

};

})

.catch(function(err) {

console.log(err.name + ": " + err.message);

});

兼容性

允许网站使用相机和麦克风_通过浏览器获取麦克风或相机等媒体的使用权限相关推荐

  1. python相机拍照显示_从solvePnP获取摄影机姿势

    目标: 我需要检索相机的位置和姿态角(使用OpenCV/Python).在 定义: 姿态角定义为: 偏航是相机放置在水平面上时的总体方向:朝北=0,朝东=90°,南=180°,西=270°,等等 俯仰 ...

  2. zed相机拆机_「zed」zed双目相机的windows配置 - 金橙教程网

    zed zed相机非常方便,我用的时候10m内的测距效果非常不错,这里讲一下怎么配置. 首先去官网下载安装包,如果你买的zed相机里面附带u盘有安装包的话,,不建议你使用U盘里面的安装包,它给你的安装 ...

  3. zed相机拆机_机器人技术:ZED 双目相机内参标定方法

    今天在家总结了下标定 ZED 相机的步骤,方便开学后直接开整. 一.准备工作 一个 8x6 的棋盘标定板,边长 10.8 cm,因为标定用的是内部角点,所以实际打印出是 9x7 大小 保证一个 5m ...

  4. 如何使用c语言获取麦克风信息,[C#] 如何获取麦克风采集的音频信息 和 如何根据波形播放声音。...

    你好: 我对这方面也不懂,但是我觉得如果想分析音频数据的话首先要知道麦克风采集到的音频是什么格式的,然后需要了解这种格式的音频数据的二进制流的编码规范,比如wav格式的音频,参考一下这篇博客, wav ...

  5. 允许网站使用相机和麦克风_手机使用应用时总是需要获取权限,这3个权限不能随意给,望周知...

    阅读本文前,请您先点击上面的蓝色字体,再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注.(注:本文转载自网络,如有侵权,请联系我们进行删除, ...

  6. 谷歌不支持调用摄像头麦克风_谷歌大手一挥,第三方相机或已无立锥之地

    随着本月初谷歌方面正式发布了Android 11的Beta 3版本,按照官方的计划,Beta3将是Android 11的最后一个测试版,因此也意味着下次推送将会迎来正式版本的亮相.预计Android ...

  7. 谷歌不支持调用摄像头麦克风_谷歌大手一挥,第三方相机APP或已无立锥之地

    随着本月初谷歌方面正式发布了Android 11的Beta 3版本,按照官方的计划,Beta3将是Android 11的最后一个测试版,因此也意味着下次推送将会迎来正式版本的亮相.预计Android ...

  8. python相机标定流程图_相机标定——OpenCV-Python Tutorials

    目标 我们将了解导致相机失真.扭曲的内因与外因 我们将试着找到这些畸变参数,并消除畸变 基础 如今大量廉价的摄像机导致了很多照片畸变.两个主要的畸变是径向畸变和切向畸变. 由于径向畸变,直线会变弯.距 ...

  9. 前端 相机 自定义取景框_索尼ZV-1数码相机:专业而易用,Vlog和网络主播的进阶良机...

    索尼ZV-1是专为视频内容创作者设计的一款数码相机,事实上称它为数码相机已经不合适了,因为它的设计已完全向短视频拍摄为主,而照相功能只是其基础和部分.可以说,它是一款在黑卡RX100数码相机基础上,强 ...

最新文章

  1. 济南python工资一般多少钱-济南Python+人工智能
  2. 从nginx日志原始二进制数据还原文件
  3. BUUCTF-WEB:[强网杯 2019]随便注 1
  4. 【转】VPP基本安装
  5. 正常人一天步行走路多少为宜
  6. eclipse中如何修改编码格式
  7. AndroidStudio 内存泄漏分析 Memory Monitor
  8. 新建mavan项目转为web项目
  9. inline-block从入门到精通
  10. Java JDK 8 32位下载
  11. 红帽linux中文系统下载iso,红帽子9.0版下载-redhat linux 9.0 iso下载 简体中文正式版-IT猫扑网...
  12. 如何处理 mka 格式的音频文件
  13. mysql命令行常用命令_mysql命令行常用命令
  14. SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法
  15. matlab屏保弹球,连续时间下的弹球建模
  16. 如何禁用Citrix Receiver硬件加速功能
  17. 三星拿出了四摄手机,可惜诚意不足,挑战国产手机成奢望
  18. 计算机与机械工程相结合的专业,计算机和机械有何结合的专业
  19. 安装maven时安照说明配置环境变量JAVA_HOME
  20. KRPano动态热点专用素材图50多个,加动态热点使用方法

热门文章

  1. CREO3.0二次开发+VS2012环境配置
  2. php版本有什么不同,php版本区别_php各版本区别
  3. 开始学习SHAREPOINT 2003。
  4. 干货|一文读懂 Spring Data Jpa!
  5. Word list 3
  6. matlab 箱图 保存,[转载]Matlab图保存方法
  7. 基础实验6-2.3 拯救007 (25分) [浙大版《数据结构学习与实验指导(第2版)》]
  8. 关于封装各英文解释 资料
  9. 2018 (天津)新能源汽车三电系统技术发展交流大会暨汽车轻量化技术开发与材料应用论坛
  10. 5分钟学会撤池子 薄饼pancakeswap教程 撤销流通池图文课程