js利用webrtc实现浏览器录音并保存文件 详细代码
时间: 2024-01-20 11:04:28 浏览: 125
以下是使用WebRTC实现浏览器录音并保存文件的详细代码:
HTML部分:
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WebRTC录音</title>
</head>
<body>
<button id="startButton">开始录音</button>
<button id="stopButton" disabled>停止录音</button>
<script src="app.js"></script>
</body>
</html>
```
JavaScript部分:
```
let audioRecorder;
let audioChunks = [];
const startButton = document.getElementById('startButton');
const stopButton = document.getElementById('stopButton');
startButton.addEventListener('click', startRecording);
stopButton.addEventListener('click', stopRecording);
function startRecording() {
navigator.mediaDevices.getUserMedia({audio: true})
.then(stream => {
audioRecorder = new MediaRecorder(stream);
audioRecorder.addEventListener('dataavailable', event => {
audioChunks.push(event.data);
});
audioRecorder.start();
startButton.disabled = true;
stopButton.disabled = false;
}).catch(err => {
console.log('getUserMedia Error:', err);
});
}
function stopRecording() {
audioRecorder.stop();
audioRecorder.stream.getTracks().forEach(track => track.stop());
startButton.disabled = false;
stopButton.disabled = true;
saveRecordedAudio();
}
function saveRecordedAudio() {
const audioBlob = new Blob(audioChunks, {type: 'audio/wav'});
const audioUrl = URL.createObjectURL(audioBlob);
const link = document.createElement('a');
link.href = audioUrl;
link.download = 'recorded_audio.wav';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
```
代码解释:
1. 首先,我们定义了两个按钮:开始录音和停止录音,并将它们添加到HTML中。
2. 然后,我们定义了一个`audioRecorder`变量和一个`audioChunks`数组来存储录制的音频数据。
3. 当用户单击“开始录音”按钮时,我们使用`getUserMedia()`方法请求访问麦克风,并将流传递给`MediaRecorder`对象。我们还为`MediaRecorder`对象添加了一个`dataavailable`事件监听器,以便在音频数据可用时将它们推入`audioChunks`数组中。
4. 当用户单击“停止录音”按钮时,我们停止`MediaRecorder`对象,停止流并调用`saveRecordedAudio()`函数来保存录制的音频数据。
5. 在`saveRecordedAudio()`函数中,我们将`audioChunks`数组中的音频数据转换为一个Blob对象,并创建一个URL以便下载该文件。我们创建一个链接元素,并将其添加到HTML中,然后触发click事件来下载该文件。最后,我们从HTML中删除链接元素。
注意:由于浏览器安全限制,必须在服务器上运行此代码,否则将无法访问麦克风。
阅读全文