js 使用webrtc实现录音功能,并压缩为base64,传递后端,有后端保存为本地文件,详细代码
时间: 2024-04-23 10:27:22 浏览: 203
好的,以下是使用 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/save-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);
});
```
后端代码(使用 Node.js + Express):
```javascript
const express = require('express');
const fs = require('fs');
const app = express();
const PORT = 3000;
app.use(express.json());
app.post('/api/save-audio', (req, res) => {
const { audioData } = req.body;
// 将 Base64 数据转换为二进制数据
const binaryData = Buffer.from(audioData, 'base64');
// 生成文件名
const fileName = `recording_${Date.now()}.webm`;
// 将二进制数据保存为文件
fs.writeFile(fileName, binaryData, (err) => {
if (err) {
console.error(err);
res.status(500).json({ error: 'Failed to save audio file' });
} else {
console.log(`Saved audio file: ${fileName}`);
res.json({ success: true });
}
});
});
app.listen(PORT, () => {
console.log(`Server listening at http://localhost:${PORT}`);
});
```
以上代码实现了以下功能:
1. 获取音频流
2. 创建 `MediaRecorder` 对象,并存储录音数据
3. 将录音数据转换为 `Blob`,再转换为 Base64
4. 将 Base64 数据传给后端保存为本地文件
5. 在后端将 Base64 数据转换为二进制数据,并保存为本地文件
你只需要将 `/api/save-audio` 替换为你的后端保存接口即可。另外,由于 `MediaRecorder` 对象在不同浏览器中的实现可能有所不同,所以你需要对不同浏览器进行兼容性处理。
阅读全文