HTML5的getUserMedia API是WebRTC规范的一部分,允许网页直接访问用户的摄像头、麦克风等媒体设备,是实现网页录音功能的核心接口。通过该接口可以主动向用户请求麦克风权限,获取音频流后就能进行后续的录音处理。

getUserMedia API基本用法
getUserMedia是navigator.mediaDevices对象下的方法,调用时会触发浏览器的权限申请弹窗,用户允许后才能获取对应的媒体流。它的基本语法如下:
// 检查浏览器是否支持getUserMedia
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
// 请求麦克风权限,只获取音频流
const constraints = {
audio: true, // 开启音频采集
video: false // 不需要视频
};
navigator.mediaDevices.getUserMedia(constraints)
.then(stream => {
// 成功获取音频流后的处理逻辑
console.log('成功获取麦克风音频流', stream);
})
.catch(error => {
// 处理权限拒绝或错误情况
console.error('获取麦克风权限失败', error);
});
} else {
console.error('当前浏览器不支持getUserMedia API');
}
实现完整录音功能步骤
仅获取音频流还不够,需要结合MediaRecorder API才能实现录音功能,完整流程如下:
1. 请求麦克风权限并获取音频流
首先按照上面的基本用法调用getUserMedia获取音频流,这里需要处理用户拒绝权限、浏览器不支持等异常情况。
2. 初始化MediaRecorder实例
MediaRecorder可以将音频流编码为指定格式的音频数据,初始化时需要传入获取到的音频流,还可以指定音频的编码格式、码率等参数。
let mediaRecorder;
let audioChunks = []; // 存储录音片段
// 获取音频流后的处理
function handleStream(stream) {
// 初始化MediaRecorder,指定音频格式为webm
const options = {
mimeType: 'audio/webm;codecs=opus'
};
// 检查是否支持指定的编码格式
if (!MediaRecorder.isTypeSupported(options.mimeType)) {
console.warn('不支持webm opus格式,使用默认格式');
delete options.mimeType;
}
mediaRecorder = new MediaRecorder(stream, options);
// 监听录音数据可用事件,收集录音片段
mediaRecorder.ondataavailable = (event) => {
if (event.data.size > 0) {
audioChunks.push(event.data);
}
};
// 监听录音结束事件,生成最终音频文件
mediaRecorder.onstop = () => {
// 将录音片段合并为Blob对象
const audioBlob = new Blob(audioChunks, { type: 'audio/webm' });
// 生成音频文件的临时URL
const audioUrl = URL.createObjectURL(audioBlob);
console.log('录音完成,音频URL:', audioUrl);
// 清空录音片段数组
audioChunks = [];
// 停止音频流的所有轨道,释放资源
stream.getTracks().forEach(track => track.stop());
};
}
3. 控制录音的开始和停止
通过MediaRecorder的start和stop方法控制录音流程,还可以设置start方法的参数来指定录音片段的收集间隔。
// 开始录音
function startRecord() {
if (!mediaRecorder) {
console.error('请先获取麦克风权限');
return;
}
audioChunks = []; // 清空之前的录音数据
mediaRecorder.start(1000); // 每1000ms收集一次录音片段
console.log('录音开始');
}
// 停止录音
function stopRecord() {
if (mediaRecorder && mediaRecorder.state !== 'inactive') {
mediaRecorder.stop();
console.log('录音停止');
}
}
常见问题与注意事项
- 权限要求:
getUserMedia只能在HTTPS环境或者localhost、127.0.0.1、192.168.0.1等本地地址下使用,普通HTTP环境会直接报错。 - 用户交互触发:部分浏览器要求
getUserMedia的调用必须由用户的主动交互行为触发,比如点击按钮,不能在页面加载时自动调用。 - 错误处理:需要覆盖权限被拒绝、没有可用麦克风设备、浏览器不支持API等多种错误场景,给用户明确的提示。
- 资源释放:录音结束后要及时调用音频流轨道的
stop方法,避免麦克风一直被占用。
兼容情况说明
目前主流现代浏览器都支持getUserMedia和MediaRecorder API,但是不同浏览器支持的音频编码格式有差异,实际开发中可以通过MediaRecorder.isTypeSupported方法检测浏览器支持的格式,优先使用兼容性更好的编码方案。
| 浏览器 | getUserMedia支持情况 | 常用支持音频格式 |
|---|---|---|
| Chrome | 完全支持 | audio/webm;codecs=opus |
| Firefox | 完全支持 | audio/ogg;codecs=opus |
| Safari | 完全支持 | audio/mp4 |
| Edge | 完全支持 | audio/webm;codecs=opus |
HTML5getUserMedia麦克风权限录音Web_API修改时间:2026-06-20 06:54:30