imetting_backend/DEPLOYMENT_AUDIO_FEATURES.md

102 lines
3.4 KiB
Markdown
Raw Normal View History

2025-12-26 08:58:36 +00:00
# 音频处理功能部署说明
## 1. 安装Python依赖
```bash
cd /Users/jiliu/工作/projects/imeeting/backend
pip install mutagen
```
## 2. 执行数据库迁移
### 2.1 创建用户日志表
```bash
mysql -u root -p imeeting < sql/migrations/create_user_logs_table.sql
```
### 2.2 为audio_files表添加duration字段
```bash
mysql -u root -p imeeting < sql/migrations/add_duration_to_audio_files.sql
```
## 3. 功能说明
### 3.1 用户日志表 (user_logs)
- 记录用户登录活动
- 字段log_id, user_id, action_type, ip_address, user_agent, metadata, created_at
- 管理后台可查询用户最后登录时间
### 3.2 音频处理优化
**音频时长计算:**
- 使用mutagen库自动识别音频格式并提取时长
- 支持mp3, m4a, mp4, wav等常见格式
- 时长保存到audio_files.duration字段单位
- 时长读取功能位于`app/utils/audio_parser.py`
### 3.3 管理后台用户统计
- 排除没有会议的用户
- 显示字段:
- ID
- 用户名
- 姓名
- 注册时间
- 最新登录时间从user_logs表查询
- 会议数量
- 会议时长从audio_files.duration汇总格式Xh Ym
## 4. 代码变更清单
### 后端变更:
- `/backend/app/utils/audio_parser.py` - 新增音频时长解析工具
- `/backend/app/api/endpoints/meetings.py` - 音频上传时调用audio_parser获取时长修复Safari播放问题
- `/backend/app/services/audio_service.py` - 增加duration参数
- `/backend/app/api/endpoints/auth.py` - 登录时记录日志
- `/backend/app/api/endpoints/admin_dashboard.py` - 更新用户统计查询
- `/backend/app/models/models.py` - 新增UserLog模型
### 前端变更:
- `/frontend/src/pages/HomePage.jsx` - 密码显示/隐藏切换
- `/frontend/src/pages/HomePage.css` - 密码切换按钮样式
- `/frontend/src/pages/AdminDashboard.jsx` - 用户列表增加会议时长列
- `/frontend/src/pages/MeetingPreview.jsx` - 新增转录标签页修复Safari音频播放
- `/frontend/src/pages/MeetingDetails.jsx` - 修复Safari音频播放问题
### 数据库变更:
- `sql/migrations/create_user_logs_table.sql` - 创建用户日志表
- `sql/migrations/add_duration_to_audio_files.sql` - 添加音频时长字段
## 5. 测试检查清单
- [ ] 安装Python依赖成功
- [ ] 数据库迁移执行成功
- [ ] 用户登录后user_logs表有记录
- [ ] 上传音频文件Safari可以正常播放
- [ ] 上传音频后audio_files.duration有正确的时长值
- [ ] 管理后台用户列表显示正确(排除无会议用户)
- [ ] 用户列表中会议时长统计正确
- [ ] 登录页面密码显示/隐藏按钮正常工作
- [ ] 会议预览页面音频播放正常Safari/Chrome
- [ ] 会议详情页面音频播放正常Safari/Chrome
## 6. 注意事项
1. **音频时长计算**
- 使用mutagen自动识别格式
- 计算失败时duration为0不影响其他功能
- 支持所有mutagen支持的格式
2. **Safari音频播放兼容性**
- 使用直接src属性而非source子元素
- preload="metadata"模式
- 后端支持HTTP Range请求
- 正确的MIME类型由后端自动设置
3. **用户日志**
- 登录日志记录失败不影响登录流程
- IP地址优先从X-Forwarded-For获取考虑代理场景
4. **管理后台统计**
- 使用INNER JOIN过滤无会议用户
- 时长汇总从audio_files.duration计算
- 最后登录时间从user_logs子查询获取