webrtc实现录音 , 并保存文件,和传递后端,详细示例代码
时间: 2024-02-05 11:02:39 浏览: 290
好的,以下是一个完整的示例代码,它实现了使用WebRTC录制音频并将其保存到本地,并将录制的音频文件发送到后端进行进一步处理。
```javascript
// 获取用户媒体许可
navigator.mediaDevices.getUserMedia({ audio: true })
.then(function(stream) {
// 创建MediaRecorder对象
var mediaRecorder = new MediaRecorder(stream);
// 存储音频数据块
var chunks = [];
// 监听音频数据可用事件
mediaRecorder.ondataavailable = function(e) {
chunks.push(e.data);
};
// 监听录音结束事件
mediaRecorder.onstop = function(e) {
// 将音频数据块合并成单个Blob对象
var blob = new Blob(chunks, { 'type' : 'audio/wav' });
// 创建URL,用于播放录制的音频
var audioURL = URL.createObjectURL(blob);
// 创建一个新的Audio元素并设置其源为录制的音频
var audio = new Audio(audioURL);
// 将录制的音频文件发送到后端进行处理
var formData = new FormData();
formData.append('audioFile', blob, 'recording.wav');
var xhr = new XMLHttpRequest();
xhr.open('POST', '/process-audio', true);
xhr.onload = function(e) {
if (this.status == 200) {
// 处理成功回调
}
};
xhr.send(formData);
};
// 开始录音
mediaRecorder.start();
// 录音持续时间
var duration = 5000; // 5秒钟
// 停止录音
setTimeout(function() {
mediaRecorder.stop();
}, duration);
})
.catch(function(err) {
console.log('获取用户媒体许可失败:' + err);
});
```
这个示例代码使用了Promise语法,它首先使用getUserMedia()方法获取用户的媒体许可,然后创建一个MediaRecorder对象来记录音频流。每当音频数据可用时,它将数据块存储在一个数组中。当录音结束时,它将所有音频数据块合并成单个Blob对象,并将其发送到后端进行进一步处理。最后,它使用setTimeout()方法设置录音持续时间,并在到达时间后停止录音。
阅读全文