101 lines
2.4 KiB
Markdown
101 lines
2.4 KiB
Markdown
# App 端实时录音配置说明
|
||
|
||
## 让 recorderManager.onFrameRecorded 在 App 端工作的关键配置
|
||
|
||
### 必须满足的条件:
|
||
|
||
1. **format 必须是 'pcm'**
|
||
```javascript
|
||
format: 'pcm' // 不能是 mp3 或 aac
|
||
```
|
||
|
||
2. **必须设置 frameSize**
|
||
```javascript
|
||
frameSize: 5 // 单位 KB,建议 1-10
|
||
```
|
||
|
||
3. **sampleRate 必须是标准值**
|
||
```javascript
|
||
sampleRate: 16000 // 只能是 8000/16000/44100
|
||
```
|
||
|
||
4. **完整配置示例**
|
||
```javascript
|
||
recorderManager.start({
|
||
duration: 600000, // 最长录音时间
|
||
sampleRate: 16000, // 采样率
|
||
numberOfChannels: 1, // 单声道
|
||
encodeBitRate: 48000, // 编码比特率
|
||
format: 'pcm', // 关键:必须 pcm
|
||
frameSize: 5, // 关键:必须设置
|
||
audioSource: 'auto' // 音频源
|
||
})
|
||
```
|
||
|
||
## 工作原理
|
||
|
||
### 实时流式传输模式(推荐)
|
||
- 按住按钮 → 开始录音
|
||
- 录音持续进行,实时产生音频帧
|
||
- 按住时:发送音频帧到服务器
|
||
- 松开时:停止发送(但录音继续)
|
||
- 再次按住:继续发送
|
||
|
||
### 优点
|
||
- 低延迟,实时传输
|
||
- 服务器可以实时处理
|
||
- 用户体验好
|
||
|
||
### 缺点
|
||
- 需要 PCM 格式(文件较大)
|
||
- 需要服务器支持流式处理
|
||
|
||
## 备用方案
|
||
|
||
如果 `onFrameRecorded` 仍然不工作,会自动降级到 `onStop` 方案:
|
||
|
||
```javascript
|
||
recorderManager.onStop((res) => {
|
||
// 读取完整录音文件
|
||
// 一次性发送到服务器
|
||
})
|
||
```
|
||
|
||
## 调试技巧
|
||
|
||
1. **查看日志**
|
||
- `✅ 录音已开始` - 录音启动成功
|
||
- `🎤 收到音频帧 #1` - 实时帧工作
|
||
- `⏹️ 录音已停止` - 降级到备用方案
|
||
|
||
2. **如果没有音频帧**
|
||
- 检查 format 是否为 'pcm'
|
||
- 检查 frameSize 是否设置
|
||
- 检查 manifest.json 中 Record 模块是否启用
|
||
|
||
3. **性能优化**
|
||
- frameSize 越小,延迟越低,但回调频率越高
|
||
- 建议值:3-5 KB
|
||
|
||
## 服务器端要求
|
||
|
||
服务器需要支持:
|
||
1. WebSocket 连接
|
||
2. 接收 PCM 格式音频流
|
||
3. 实时语音识别(如果需要)
|
||
4. 返回音频响应
|
||
|
||
## 当前状态
|
||
|
||
✅ 录音功能已实现
|
||
✅ 文件发送已成功
|
||
⚠️ 需要测试实时帧是否工作
|
||
⚠️ 需要检查服务器端处理
|
||
|
||
## 下一步
|
||
|
||
1. 重新编译并测试
|
||
2. 查看是否有 `🎤 收到音频帧` 日志
|
||
3. 如果有,说明实时流式传输工作
|
||
4. 如果没有,会自动使用备用方案(文件发送)
|