js 使用webrtc实现录音功能,并压缩为base64,传递后端处理详细代码
时间: 2024-04-24 21:22:03 浏览: 309
好的,以下是使用 WebRTC 实现录音并压缩为 Base64 的代码:
```javascript
// 获取音频流
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
// 创建 MediaRecorder 对象
const options = { mimeType: 'audio/webm' };
const mediaRecorder = new MediaRecorder(stream, options);
// 存储录音数据
const recordedChunks = [];
// 开始录音
mediaRecorder.start();
// 监听录音数据
mediaRecorder.addEventListener('dataavailable', event => {
recordedChunks.push(event.data);
});
// 停止录音
mediaRecorder.addEventListener('stop', () => {
// 将录音数据转换为 Blob
const blob = new Blob(recordedChunks, {
type: 'audio/webm'
});
// 创建 FileReader 对象
const fileReader = new FileReader();
// 监听 FileReader 对象的 onload 事件
fileReader.onload = event => {
// 将录音数据转换为 Base64
const base64Data = event.target.result.split(',')[1];
// 将 Base64 数据传给后端处理
fetch('/api/process-audio', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ audioData: base64Data })
})
.then(response => response.json())
.then(data => {
console.log(data);
});
};
// 读取录音数据
fileReader.readAsDataURL(blob);
});
// 录音 10 秒后停止
setTimeout(() => {
mediaRecorder.stop();
}, 10000);
})
.catch(error => {
console.error(error);
});
```
以上代码实现了以下功能:
1. 获取音频流
2. 创建 `MediaRecorder` 对象,并存储录音数据
3. 将录音数据转换为 `Blob`,再转换为 Base64
4. 将 Base64 数据传给后端处理
你只需要将 `/api/process-audio` 替换为你的后端处理接口即可。另外,由于 `MediaRecorder` 对象在不同浏览器中的实现可能有所不同,所以你需要对不同浏览器进行兼容性处理。
阅读全文