164 lines
4.4 KiB
Markdown
164 lines
4.4 KiB
Markdown
|
|
# 当前测试状态
|
|||
|
|
|
|||
|
|
## 📊 已知情况
|
|||
|
|
|
|||
|
|
### 1. 录音功能
|
|||
|
|
- ✅ 录音可以启动
|
|||
|
|
- ✅ 录音可以停止
|
|||
|
|
- ✅ 生成了录音文件路径
|
|||
|
|
- ⚠️ duration 和 fileSize 为 undefined(Android 设备兼容性问题,已修复)
|
|||
|
|
|
|||
|
|
### 2. WebSocket 连接
|
|||
|
|
- ✅ WebSocket 已连接(状态 1 = OPEN)
|
|||
|
|
|
|||
|
|
### 3. 当前问题
|
|||
|
|
- ❌ 文件读取没有执行或失败
|
|||
|
|
- 没有看到"文件读取成功"的日志
|
|||
|
|
|
|||
|
|
## 🔍 可能的原因
|
|||
|
|
|
|||
|
|
### 原因1: 代码逻辑问题
|
|||
|
|
- 可能在某个检查处提前返回了
|
|||
|
|
- 需要更多日志来定位
|
|||
|
|
|
|||
|
|
### 原因2: 文件系统权限问题
|
|||
|
|
- App 可能没有文件读取权限
|
|||
|
|
- 需要检查 manifest.json 配置
|
|||
|
|
|
|||
|
|
### 原因3: 文件路径问题
|
|||
|
|
- 文件路径可能不正确
|
|||
|
|
- 文件可能不存在
|
|||
|
|
|
|||
|
|
## 🔧 已添加的改进
|
|||
|
|
|
|||
|
|
### 1. 跳过 duration 检查
|
|||
|
|
```javascript
|
|||
|
|
// ✅ 修复后
|
|||
|
|
if (res.duration !== undefined && res.duration < 500) {
|
|||
|
|
// 只有当 duration 有值且太短时才返回
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
// 如果 duration 是 undefined,跳过检查,继续执行
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 添加更多日志
|
|||
|
|
```javascript
|
|||
|
|
console.log('✅ 录音文件路径有效,准备读取文件...')
|
|||
|
|
console.log('🔌 WebSocket 状态:', this.socketTask.readyState)
|
|||
|
|
console.log('✅ WebSocket 状态正常,开始读取文件...')
|
|||
|
|
console.log('📂 获取文件系统管理器:', fs ? '成功' : '失败')
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 添加文件大小验证
|
|||
|
|
```javascript
|
|||
|
|
if (actualSize < 32000) {
|
|||
|
|
console.error('❌ 文件太小(< 1秒)')
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📱 下一步测试
|
|||
|
|
|
|||
|
|
### 1. 重新编译
|
|||
|
|
在 HBuilderX 中重新运行项目
|
|||
|
|
|
|||
|
|
### 2. 测试步骤
|
|||
|
|
1. 进入语音通话页面
|
|||
|
|
2. 按住"按住说话"按钮 3-5 秒
|
|||
|
|
3. 松开按钮
|
|||
|
|
4. 观察日志
|
|||
|
|
|
|||
|
|
### 3. 关键日志检查
|
|||
|
|
|
|||
|
|
应该看到以下日志序列:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
✅ 录音文件路径有效,准备读取文件...
|
|||
|
|
🔌 WebSocket 状态: 1
|
|||
|
|
状态说明: 0=CONNECTING, 1=OPEN, 2=CLOSING, 3=CLOSED
|
|||
|
|
✅ WebSocket 状态正常,开始读取文件... ← 新增
|
|||
|
|
📂 获取文件系统管理器: 成功 ← 新增
|
|||
|
|
✅ 文件读取成功 ← 关键!
|
|||
|
|
📊 实际文件大小: 160000 bytes
|
|||
|
|
📊 预计录音时长: 5.00 秒
|
|||
|
|
📦 开始分片发送(官方推荐参数)
|
|||
|
|
...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 如果还是没有"文件读取成功"
|
|||
|
|
|
|||
|
|
可能的情况:
|
|||
|
|
|
|||
|
|
#### 情况A: 没有看到"开始读取文件"
|
|||
|
|
说明在 WebSocket 检查处返回了
|
|||
|
|
- 检查 WebSocket 状态是否真的是 1
|
|||
|
|
|
|||
|
|
#### 情况B: 看到"开始读取文件"但没有"文件读取成功"
|
|||
|
|
说明文件读取失败了
|
|||
|
|
- 可能是文件路径问题
|
|||
|
|
- 可能是权限问题
|
|||
|
|
- 应该会有"文件读取失败"的错误日志
|
|||
|
|
|
|||
|
|
#### 情况C: 看到"文件读取成功"但文件太小
|
|||
|
|
说明录音时间太短或录音质量问题
|
|||
|
|
- 检查"实际文件大小"
|
|||
|
|
- 应该 > 96000 bytes(3 秒)
|
|||
|
|
|
|||
|
|
## 🎯 预期结果
|
|||
|
|
|
|||
|
|
完整的成功日志应该是:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
=== startRecording 被调用 ===
|
|||
|
|
✅ recorderManager.start 已调用
|
|||
|
|
✅ 录音已开始
|
|||
|
|
=== stopTalking 被调用 ===
|
|||
|
|
🛑 停止录音并准备发送...
|
|||
|
|
⏹️ 录音已停止
|
|||
|
|
📋 完整的 res 对象: {"tempFilePath":"..."}
|
|||
|
|
📁 文件路径: _doc/uniapp_temp_xxx/recorder/xxx.pcm
|
|||
|
|
⏱️ 录音时长: undefined ms ← 可能是 undefined
|
|||
|
|
📦 文件大小: undefined bytes ← 可能是 undefined
|
|||
|
|
✅ 录音文件路径有效,准备读取文件...
|
|||
|
|
🔌 WebSocket 状态: 1
|
|||
|
|
✅ WebSocket 状态正常,开始读取文件...
|
|||
|
|
📂 获取文件系统管理器: 成功
|
|||
|
|
✅ 文件读取成功
|
|||
|
|
📊 数据类型: object
|
|||
|
|
📊 是否为 ArrayBuffer: true
|
|||
|
|
📊 实际文件大小: 160000 bytes
|
|||
|
|
📊 预计录音时长: 5.00 秒
|
|||
|
|
📦 开始分片发送(官方推荐参数)
|
|||
|
|
📊 总大小: 160000 bytes
|
|||
|
|
📊 每片大小: 3200 bytes
|
|||
|
|
📊 发送间隔: 100 ms
|
|||
|
|
📊 预计发送时间: 5000 ms
|
|||
|
|
📤 发送第 1 片,大小: 3200 bytes
|
|||
|
|
✅ 第 1 片发送成功
|
|||
|
|
...
|
|||
|
|
✅ 所有音频片段发送完成,共 50 片
|
|||
|
|
📤 发送结束标记 "end"
|
|||
|
|
✅ 结束标记发送成功,等待服务器处理...
|
|||
|
|
📋 收到控制消息, type: reply_text
|
|||
|
|
🎵 收到音频数据流
|
|||
|
|
📋 收到控制消息, type: reply_end
|
|||
|
|
[播放音频]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📞 如果还有问题
|
|||
|
|
|
|||
|
|
请提供:
|
|||
|
|
1. 完整的客户端日志(从按下按钮到最后一条日志)
|
|||
|
|
2. 特别注意是否有:
|
|||
|
|
- "开始读取文件"的日志
|
|||
|
|
- "文件读取成功"的日志
|
|||
|
|
- "文件读取失败"的错误日志
|
|||
|
|
3. 服务器日志(如果客户端成功发送了数据)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**当前状态**: 等待测试
|
|||
|
|
**已修复**: duration/fileSize undefined 问题
|
|||
|
|
**待确认**: 文件读取是否成功
|
|||
|
|
**下一步**: 重新编译并测试
|