84 lines
1.9 KiB
Markdown
84 lines
1.9 KiB
Markdown
# 本地录制修复 - 快速参考
|
||
|
||
## 🔍 问题
|
||
本地录制总是失败,blob 为空
|
||
|
||
## 🎯 根本原因
|
||
录制启动太晚(1200ms),在对方挂断后才启动,此时 SDK 已销毁视频轨道
|
||
|
||
## ✅ 解决方案
|
||
|
||
### 1. 缩短启动延迟
|
||
```
|
||
1200ms → 500ms
|
||
```
|
||
|
||
### 2. 快速重试
|
||
```
|
||
300ms 间隔,最多 10 次
|
||
```
|
||
|
||
### 3. 立即停止录制
|
||
```
|
||
监听 USER_LEAVE 事件,立即调用 beginStopNow()
|
||
```
|
||
|
||
### 4. 缩短停止延迟
|
||
```
|
||
300ms → 100ms
|
||
```
|
||
|
||
## 📊 测试检查清单
|
||
|
||
### 启动阶段(接通后 1 秒内)
|
||
- [ ] 看到 "尝试启动本地录制"
|
||
- [ ] 看到 "视频元素已就绪"
|
||
- [ ] 看到 "✅ 本地录制已成功启动"
|
||
|
||
### 录制阶段(每 250ms)
|
||
- [ ] 看到 "收到数据块,大小: XXX"
|
||
- [ ] 数据块数持续增加
|
||
|
||
### 停止阶段(挂断时)
|
||
- [ ] 看到 "检测到通话结束事件"
|
||
- [ ] 看到 "已收集数据块: X"(X > 0)
|
||
- [ ] 看到 "生成 Blob: XXX bytes"(不是 null)
|
||
- [ ] 看到 "本地录制已上传并关联到通话记录"
|
||
|
||
## 🚨 常见问题
|
||
|
||
### 问题:数据块数为 0
|
||
**原因**:录制启动太晚或视频流无效
|
||
**检查**:
|
||
```javascript
|
||
// 控制台执行
|
||
document.querySelectorAll('video').forEach((v, i) => {
|
||
console.log(`Video ${i}:`, v.readyState, v.srcObject)
|
||
})
|
||
```
|
||
|
||
### 问题:Blob 为 null
|
||
**原因**:通话时间太短(< 2 秒)
|
||
**解决**:保持通话至少 5 秒
|
||
|
||
### 问题:录制启动失败
|
||
**原因**:找不到视频元素
|
||
**检查**:是否看到 "未找到视频元素" 日志
|
||
|
||
## 📝 修改的文件
|
||
1. `admin/src/components/chat-dialog/index.vue`
|
||
2. `admin/src/utils/call-local-recorder.ts`
|
||
|
||
## 🔗 详细文档
|
||
- `LOCAL_RECORDING_DEBUG_GUIDE.md` - 完整调试指南
|
||
- `RECORDING_FIX_SUMMARY.md` - 修复总结
|
||
- `admin/test-local-recording.html` - 测试工具
|
||
|
||
## 💡 测试建议
|
||
1. 清除浏览器缓存
|
||
2. 打开控制台(F12)
|
||
3. 发起视频通话
|
||
4. 保持通话 5 秒以上
|
||
5. 正常挂断
|
||
6. 检查日志和录制结果
|