# 按住说话功能调试指南 ## 问题现象 按住说话按钮后,日志显示"开始说话"和"停止说话",但没有音频数据发送。 ## 已添加的调试日志 ### 1. 按住按钮时 ``` startTalking 被调用, micEnabled: true, isRecording: false 开始说话, isTalking 设置为: true 录音未启动,开始启动录音 ``` ### 2. 录音启动时 ``` === startRecording 被调用 === isRecording: false isApp: true/false socketTask 状态: 1 (1表示已连接) ``` ### 3. App 端原生录音 ``` === startRecord (App原生) 被调用 === 请求录音权限 权限请求结果: {...} 录音权限已授予 开始启动原生录音器 原生录音器已启动 收到原生音频帧, isTalking: true, buffer size: xxx ✅ 发送原生音频数据到服务器 ``` ### 4. 小程序/H5 端录音 ``` 小程序/H5 端:设置录音监听器 启动 recorderManager recorderManager.start 已调用 ✅ 录音已开始 收到音频帧, isTalking: true, frameBuffer size: xxx ✅ 发送音频数据到服务器 音频数据发送成功 ``` ## 检查清单 ### 1. WebSocket 连接状态 查看日志中的 `socketTask 状态`: - `0` = CONNECTING (连接中) - `1` = OPEN (已连接) ✅ - `2` = CLOSING (关闭中) - `3` = CLOSED (已关闭) 如果不是 `1`,说明 WebSocket 未连接成功。 ### 2. 录音权限 App 端查看: ``` 权限请求结果: { granted: [...], deniedAlways: [], deniedPresent: [] } ``` - `granted` 数组应该包含 `android.permission.RECORD_AUDIO` - 如果在 `deniedAlways` 或 `deniedPresent` 中,需要手动授权 ### 3. 录音是否真正启动 查看是否有: - App 端:`原生录音器已启动` - 小程序端:`✅ 录音已开始` 如果没有,可能是: - 权限被拒绝 - recorderManager 初始化失败 - 录音参数不支持 ### 4. 音频帧是否产生 查看是否有: - `收到音频帧` 或 `收到原生音频帧` 如果没有,说明录音器没有产生音频数据。 ### 5. isTalking 状态 查看日志中的 `isTalking` 值: - 按住时应该是 `true` - 松开时应该是 `false` 如果一直是 `false`,说明状态没有正确更新。 ## 常见问题及解决方案 ### 问题1:录音权限被拒绝 **现象**:日志显示 `录音权限被拒绝` **解决**: 1. 进入手机设置 → 应用管理 → 找到你的应用 2. 权限管理 → 麦克风 → 允许 ### 问题2:recorderManager 未初始化 **现象**:日志显示 `recorderManager 未初始化` **解决**: 1. 确认 manifest.json 中 `Record` 模块已启用 2. 重新编译项目 3. 检查是否在 App 端(App 端不使用 recorderManager) ### 问题3:WebSocket 未连接 **现象**:`socketTask 状态: null` 或不是 `1` **解决**: 1. 检查后端服务是否启动 2. 检查 WebSocket URL 是否正确 3. 检查 token 是否有效 ### 问题4:音频帧不发送 **现象**:有 `收到音频帧` 但没有 `发送音频数据` **解决**: 1. 检查 `isTalking` 是否为 `true` 2. 检查 `socketTask.readyState` 是否为 `1` 3. 确认按住按钮时没有松开 ### 问题5:录音格式不支持 **现象**:录音启动失败或报错 **解决**: 尝试修改录音参数: ```javascript recorderManager.start({ format: 'mp3', // 改为 mp3 试试 sampleRate: 16000, numberOfChannels: 1, frameSize: 1 // 改小一点 }); ``` ## 测试步骤 1. **清空控制台** 2. **进入语音通话页面** - 查看 WebSocket 是否连接成功 - 查看是否有 `WebSocket onOpen` 日志 3. **按住"按住说话"按钮** - 应该看到 `startTalking 被调用` - 应该看到 `isTalking 设置为: true` - 应该看到 `=== startRecording 被调用 ===` - 应该看到录音启动成功的日志 4. **保持按住 2-3 秒** - 应该看到多个 `收到音频帧` 日志 - 应该看到多个 `✅ 发送音频数据到服务器` 日志 5. **松开按钮** - 应该看到 `停止说话, isTalking 设置为: false` - 之后的音频帧应该显示 `⏸️ 不发送音频数据` ## 下一步 如果按照上述步骤仍然无法工作,请: 1. 截图完整的控制台日志 2. 说明是在什么平台测试(App/小程序/H5) 3. 说明具体卡在哪一步