h5页面实现录音
实现H5页面录音功能
在H5页面中实现录音功能可以通过浏览器的MediaRecorder API完成。以下是具体实现方法:
环境准备 确保使用现代浏览器(Chrome、Firefox、Edge等),部分API需要HTTPS环境或localhost才能正常工作。iOS Safari有额外限制,可能需要用户手动触发。
基本实现步骤
获取用户麦克风权限
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
// 成功获取音频流
})
.catch(err => {
console.error('麦克风访问被拒绝:', err);
});
创建MediaRecorder实例
const mediaRecorder = new MediaRecorder(stream);
let audioChunks = [];
mediaRecorder.ondataavailable = event => {
audioChunks.push(event.data);
};
mediaRecorder.onstop = () => {
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
audioChunks = [];
// 处理录音结果
};
控制录音过程
// 开始录音
mediaRecorder.start();
// 停止录音
mediaRecorder.stop();
完整示例代码
<button id="start">开始录音</button>
<button id="stop" disabled>停止</button>
<audio id="playback" controls></audio>
<script>
const startBtn = document.getElementById('start');
const stopBtn = document.getElementById('stop');
const playback = document.getElementById('playback');
let mediaRecorder, audioStream;
startBtn.addEventListener('click', async () => {
try {
audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });
mediaRecorder = new MediaRecorder(audioStream);
const audioChunks = [];
mediaRecorder.addEventListener("dataavailable", event => {
audioChunks.push(event.data);
});
mediaRecorder.addEventListener("stop", () => {
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
const audioUrl = URL.createObjectURL(audioBlob);
playback.src = audioUrl;
});
mediaRecorder.start();
startBtn.disabled = true;
stopBtn.disabled = false;
} catch (err) {
console.error('Error:', err);
}
});
stopBtn.addEventListener('click', () => {
mediaRecorder.stop();
audioStream.getTracks().forEach(track => track.stop());
startBtn.disabled = false;
stopBtn.disabled = true;
});
</script>
兼容性处理 对于不支持MediaRecorder API的浏览器,可以考虑使用第三方库如:
- RecordRTC
- wavesurfer.js
- WebAudioAPI的polyfill
音频格式选择 不同浏览器支持的音频格式可能不同:
- Chrome: audio/webm, audio/ogg
- Firefox: audio/webm
- Safari: 有限支持,通常需要转为MP3格式
注意事项

- iOS设备需要用户手势事件直接触发录音开始
- 部分浏览器在页面刷新时会保留麦克风权限状态
- 长时间录音需要考虑内存管理,分片处理音频数据
- 生产环境建议添加错误处理和用户引导提示





