开发遇到的各种问题 浏览器控制台提示mediaDevices.getUserMedia is not a function 由于受浏览器的限制,navigator.mediaDevices.getUserMedia let mediaDevices = navigator.mediaDevices || null if( mediaDevices === null ) { console.warn navigator.mediaDevices || ! let mediaDevices = navigator.mediaDevices || null if( mediaDevices === null ) { console.warn let mediaDevices = navigator.mediaDevices || null if( mediaDevices === null ) { console.warn(`请确定是否处于
navigator.mediaDevices.enumerateDevices() 如果枚举成功将会返回一个包含MediaDeviceInfo实例的数组,它包含了可用的多媒体输入输出设备的信息。 屏幕共享 MediaDevices.getDisplayMedia Chrome 72+、Firefox 66+版本已经实现了WebRTC规范中的MediaDevices.getDisplayMedia 获取到streamId后,通过mediaDevices.getUserMedia得到stream。 Firefox 33之后可以直接通过使用mediaDevices.getUserMedia,指定约束对象mediaSource为screen、window、application来实现屏幕共享。 MediaDevices/getDisplayMedia
如果想要实现共享屏幕,首先需要获取本地屏幕媒体流 navigator.mediaDevices.getDisplayMedia() 方法是 WebRTC 的一部分,它可以在现代桌面浏览器中获取屏幕或应用程序的视频和音频流 下面这个方法是支持PC和andorid的函数 function getScreenStream(callback) { if (navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia ) { // 桌面浏览器,使用 getDisplayMedia() 获取屏幕视频流 navigator.mediaDevices.getDisplayMedia({ video: true && navigator.mediaDevices.getUserMedia) { // 移动设备或不支持 getDisplayMedia() 的桌面浏览器,使用 getUserMedia() 获取屏幕视频流 navigator.mediaDevices.getUserMedia({ video: { mediaSource: 'screen' } }) .then((stream
第一步是检查浏览器是否支持此 API: if ("mediaDevices" in navigator && "getUserMedia" in navigator.mediaDevices) { 捕获视频流 要捕获由摄像机生成的视频流,我们使用 mediaDevices 对象的 getUserMedia 方法。这个方法接收一个对象,其中包含我们要请求的媒体类型(视频或音频)和一些要求。 const videoStream = await navigator.mediaDevices.getUserMedia({ video: true }); 此调用将询问用户是否允许访问摄像机。 min: 720, ideal: 1080, max: 1440, }, }, }; const videoStream = await navigator.mediaDevices.getUserMedia video"> 标签 const video = document.querySelector("#video"); const videoStream = await navigator.mediaDevices.getUserMedia
获取设备 所有设备 async function getDevices() { let devices = await navigator .mediaDevices .enumerateDevices label是设备的名称 注意的是默认设备和通讯设备会在名称前拼接了Default或者Communications并用-分隔 获取名称的方式 let devices = await navigator.mediaDevices (d) => d.kind === "audioinput"); console.info(videoinput); } getDevices(); 获取流 基本语法 navigator .mediaDevices navigator.mediaDevices || ! navigator.mediaDevices.getDisplayMedia) { console.log('getDisplayMedia is not supported!')
(function () { // 老的浏览器可能根本没有实现 mediaDevices,所以我们可以先设置一个空的对象 if (navigator.mediaDevices === undefined) { navigator.mediaDevices = {}; } if (navigator.mediaDevices.getUserMedia === undefined) { navigator.mediaDevices.getUserMedia = function (constraints) { videoPlaying = false; let v = document.getElementById('v'); let promise = navigator.mediaDevices.getUserMedia
实现:js调用USB摄像头拍照上传照片 注意:部署到线上之后需要使用https才能调用摄像头 参考文档:https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices cxt.clearRect(0, 0, this.canvas.width, this.canvas.height); } // 老的浏览器可能根本没有实现 mediaDevices ,所以我们可以先设置一个空的对象 if (navigator.mediaDevices === undefined) { navigator.mediaDevices = { }; } // 一些浏览器部分支持 mediaDevices。 if (navigator.mediaDevices.getUserMedia === undefined) { navigator.mediaDevices.getUserMedia
document.querySelector('#start').onclick = function() { if (navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia ) { navigator.mediaDevices.getDisplayMedia({ video: true, audio: false let allStream; document.querySelector('#start').onclick = function() { if (navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia) { navigator.mediaDevices.getDisplayMedia({ document.querySelector('#start').onclick = function() { if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia
navigator.mediaDevices = {}; } // Some browsers partially implement mediaDevices if (navigator.mediaDevices.getUserMedia === undefined) { navigator.mediaDevices.getUserMedia recorder || (recorder && recorder.state === "inactive")) { navigator.mediaDevices.getUserMedia 和MediaRecorder这两个api,navigator.mediaDevices.getUserMedia是用于调用硬件设备的api,在对麦克风摄像头进行操作时都需要用到这个。 之前在做视频相关开发的时候,还用到了mediaDevices下的MediaDevices.ondevicechange和navigator.mediaDevices.enumerateDevices这两个方法分别用来检测输入硬件变化
在经过几番的搜索与请教一些做专业人士后,最终我在JavaScript 的BOM编程中找到了这个对象Navigator.mediaDevices。 mediaDevices 是 Navigator 只读属性,返回一个 MediaDevices 对象,该对象可提供对相机和麦克风等媒体输入设备的连接访问,也包括屏幕共享。 navigator 下的MediaDevices有以下几个主要接口: navigator.mediaDevices.enumerateDevices() 该方法返回 一个promise,包含了系统中可用的媒体输入和输出设备的一系列信息 navigator.mediaDevices || ! navigator.mediaDevices || !
获取设备 let devices = await navigator .mediaDevices .enumerateDevices() 获取到数组的对象格式如下 { deviceId: "default label是设备的名称 注意的是默认设备和通讯设备会在名称前拼接了Default或者Communications并用-分隔 获取名称的方式 let devices = await navigator.mediaDevices let label = device.label; console.info(label); } } 摄像头 let devices = await navigator.mediaDevices then((devices) => devices.filter((d) => d.kind === "videoinput")); 麦克风 let devices = await navigator.mediaDevices track.stop(); }); } 获取摄像头的流 let device_index = this.device_index; let devices = await navigator.mediaDevices
getUserMedia.call(navigator, constraints, resolve, reject); }); } // 旧的浏览器可能无法实现mediadevices 可言,所以我们设置一个空的对象第一 if (navigator.mediaDevices === undefined) { navigator.mediaDevices = {}; } // 一些浏览器部分实现mediadevices。 if (navigator.mediaDevices.getUserMedia === undefined) { navigator.mediaDevices.getUserMedia width: 1280, height: 720 } }; navigator.mediaDevices.getUserMedia
API 介绍: MediaDevices: developer.mozilla.org/zh-CN/docs/… 这个 API 提供了如何访问媒体数据输入的设备,如 PC 电脑的摄像头、麦克风 MediaDevices.getUserMedia(): 通过传入不同的约束提条件来获取到不同的媒体数据流,前提的用户授权使用的情况下。 MediaDevices.getDisplayMedia(): 在得到用户授权后可以选择屏幕、窗口、Chrome 标签页进行媒体流的获取。 constraints: MediaStreamConstraints = { audio: false, video: true }; const stream = await navigator.mediaDevices.getUserMedia constraints: MediaStreamConstraints = { audio: true, video: false }; const stream = await navigator.mediaDevices.getUserMedia
思路分析 浏览器提供了 navigator.mediaDevices.getDisplayMedia 和 navigator.mediaDevices.getUserMedia 的 api,分别可以用来获取屏幕的流 'getDisplayMedia' : 'getUserMedia'; const stream = await navigator.mediaDevices[getMediaMethod]({ 'getDisplayMedia' : 'getUserMedia'; const stream = await navigator.mediaDevices[getMediaMethod 涉及到的 api 有 3 个: navigator.mediaDevices.getUserMedia:获取麦克风、摄像头的流 navigator.mediaDevices.getDisplayMedia
(function () { // 老的浏览器可能根本没有实现 mediaDevices,所以我们可以先设置一个空的对象 if (navigator.mediaDevices === undefined ) { navigator.mediaDevices = {}; } if (navigator.mediaDevices.getUserMedia === undefined ) { navigator.mediaDevices.getUserMedia = function (constraints) { // 首先,如果有getUserMedia let videoPlaying = false; let v = document.getElementById('v'); let promise = navigator.mediaDevices.getUserMedia
一、原理解析浏览器访问摄像头的能力主要依赖于 WebRTC(Web Real-Time Communication) 标准,其中最关键的 API 是 MediaDevices.getUserMedia( 二、使用方式基本调用navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(stream => { const canvas");const snapBtn = document.getElementById("snap");const ctx = canvas.getContext("2d");navigator.mediaDevices.getUserMedia 使用 facingMode 参数:"user" → 前置摄像头"environment" → 后置摄像头(扫码常用)多摄像头选择通过 navigator.mediaDevices.enumerateDevices 六、总结核心 API:navigator.mediaDevices.getUserMedia运行环境:HTTPS / localhost
error 失败回调函数 */ function getUserMediaToPhoto(constraints,success,error) { if(navigator.mediaDevices.getUserMedia ){ navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error); } */ function error(error) { console.log('无法访问媒体设备', error); } if(navigator.mediaDevices.getUserMedia 具体的api介绍、使用和参数可以查看MediaDevices.getUserMedia()。
navigator.mediaDevices || ! sampleRate: 16000, channelCount: 1, volume: 1.0 } }; try { const stream = await navigator.mediaDevices.getUserMedia Recorder API,Chrome 的默认格式是 webm/opus,Firefox 的默认格式是 ogg/opus,采样率都是 48000 Hz这里可以查看当前浏览器支持的 constraint:MediaDevices navigator.mediaDevices || ! .'); return; } try { const stream = await navigator.mediaDevices.getUserMedia({audio: true});
document.querySelector(".record-btn"); btn.addEventListener("click", async function () { let stream = await navigator.mediaDevices.getDisplayMedia document.querySelector(".record-btn") btn.addEventListener("click", async function () { let stream = await navigator.mediaDevices.getDisplayMedia document.querySelector(".record-btn") btn.addEventListener("click", async function () { let stream = await navigator.mediaDevices.getDisplayMedia document.querySelector(".record-btn") btn.addEventListener("click", async function () { let stream = await navigator.mediaDevices.getDisplayMedia document.querySelector(".record-btn") btn.addEventListener("click", async function () { let stream = await navigator.mediaDevices.getDisplayMedia
今天学习了调用电脑摄像头,利用canvas画布将视频当前帧转换成图片的实例,其中用到了 mediaDevices.getUserMedia 方法。 2d"), video = document.getElementById("video"); alert('该页面会调用您的摄像头') // 旧版本浏览器可能根本不支持mediaDevices ,我们首先设置一个空对象 if (navigator.mediaDevices === undefined) { navigator.mediaDevices = {}; } // 一些浏览器实现了部分mediaDevices,我们不能只分配一个对象 // 使用getUserMedia,因为它会覆盖现有的属性。 if (navigator.mediaDevices.getUserMedia === undefined) { navigator.mediaDevices.getUserMedia