vue网页端Chrome浏览器打开麦克风和摄像头

  1. 在 chrome 中 输入 chrome://flags/#unsafely-treat-insecure-origin-as-secure

  2. 查找 Insecure origins treated as secure 属性

  3. 添加你要信任的地址 例如:http://192.168.1.8:8080

  4. 选择属性

在这里插入图片描述

  1. 然后点击右下角的 重启 就ok
### Vue 中调用麦克风报错的解决方案 在 Vue 或 Nuxt 项目中实现调用麦克风的功能时,可能会遇到多种错误情况。以下是针对这些错误的具体分析解决方案。 #### 1. **HTTPS 安全协议** 浏览器出于安全性考虑,在 HTTP 协议下不允许访问设备硬件资源(如麦克风摄像头)。因此,当尝试通过 `navigator.mediaDevices.getUserMedia` 获取麦克风权限时,如果页面不是 HTTPS 加载,则会抛出异常[^3]。 解决方法:确保应用部署在 HTTPS 环境下运行。如果是本地调试环境,可以配置自签名证书来模拟 HTTPS 请求。 #### 2. **未定义 navigator.mediaDevices** 某些旧版浏览器可能不支持 WebRTC API 的部分功能,比如 `navigator.mediaDevices` 可能不存在。这通常发生在较老版本的 Chrome 浏览器或其他非主流浏览器上[^4]。 解决方法:检测是否存在该对象,并提供回退机制。 ```javascript if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { navigator.mediaDevices.getUserMedia({ audio: true }) .then(stream => console.log('Microphone access granted', stream)) .catch(err => console.error('Error accessing microphone:', err)); } else { alert('Your browser does not support the Media Devices API.'); } ``` #### 3. **用户拒绝授予权限** 即使代码逻辑正确无误,但如果用户手动关闭了浏览器中的麦克风权限设置,程序仍然无法正常工作。这种情况下,前端不会收到任何回调数据流。 解决方法:向用户提供清晰的操作指引,建议他们重新授予网站所需的权限。可以通过以下方式检查当前状态: ```javascript async function checkPermissions() { const status = await navigator.permissions.query({ name: 'microphone' }); if (status.state === 'denied') { alert('Please enable microphone permissions in your browser settings.'); } } checkPermissions(); ``` #### 4. **跨域资源共享问题** 如果你的应用依赖于外部服务端接口处理音频文件上传操作,那么还需要注意 CORS 设置。如果没有正确配置允许源地址列表或者缺少必要的响应头字段,也可能引发请求失败的情况。 解决方法:确认后端已开启相应的 CORS 政策;同时验证返回头部是否包含如下项: - Access-Control-Allow-Origin - Access-Control-Allow-Methods - Access-Control-Allow-Headers #### 实现示例代码 下面是一个完整的 Vue 组件实例演示如何获取麦克风输入并记录声音片段: ```html <template> <div id="app"> <button @click="startRecording">Start Recording</button> <button @click="stopRecording" v-if="isRecording">Stop Recording</button> <audio controls ref="audioPlayer"></audio> </div> </template> <script> export default { data() { return { mediaRecorder: null, chunks: [], isRecording: false }; }, methods: { async startRecording() { try { const stream = await navigator.mediaDevices.getUserMedia({ audio: true })[^1]; this.chunks = []; this.mediaRecorder = new MediaRecorder(stream); this.mediaRecorder.ondataavailable = event => { if (event.data.size > 0) this.chunks.push(event.data); }; this.mediaRecorder.start(); this.isRecording = true; } catch (error) { console.error(error.message || error); } }, stopRecording() { this.mediaRecorder.stop(); this.mediaRecorder.onstop = () => { const blob = new Blob(this.chunks, { type: 'audio/mp3' }); const url = URL.createObjectURL(blob); this.$refs.audioPlayer.src = url; // Set recorded sound as source of player element. this.isRecording = false; fetch('/upload-audio-endpoint', { method: 'POST', body: blob }); // Example upload logic. }; } }} </script> ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值