107 lines
3.7 KiB
Markdown
107 lines
3.7 KiB
Markdown
# 音频处理功能部署说明
|
||
|
||
## 1. 安装Python依赖
|
||
|
||
```bash
|
||
cd /Users/jiliu/工作/projects/imeeting/backend
|
||
source venv/bin/activate
|
||
pip install tinytag
|
||
```
|
||
|
||
## 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 音频处理优化
|
||
**音频时长计算:**
|
||
- 使用TinyTag库读取音频文件时长
|
||
- 纯Python实现,无需外部依赖
|
||
- 支持mp3, m4a, mp4, wav, ogg, flac等常见格式
|
||
- 能处理特殊/损坏元数据的文件
|
||
- 时长保存到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` - 新增音频时长解析工具(使用TinyTag)
|
||
- `/backend/app/api/endpoints/meetings.py` - 完整文件上传时调用audio_parser获取时长,修复Safari播放问题
|
||
- `/backend/app/api/endpoints/audio.py` - Stream上传完成时调用audio_parser获取时长
|
||
- `/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. **音频时长计算**:
|
||
- 使用TinyTag纯Python库
|
||
- 无需系统依赖,跨平台兼容
|
||
- 计算失败时duration为0,不影响其他功能
|
||
- 支持所有TinyTag支持的格式
|
||
|
||
2. **Safari音频播放兼容性**:
|
||
- 使用直接src属性而非source子元素
|
||
- preload="metadata"模式
|
||
- 后端支持HTTP Range请求
|
||
- 正确的MIME类型由后端自动设置
|
||
|
||
3. **用户日志**:
|
||
- 登录日志记录失败不影响登录流程
|
||
- IP地址优先从X-Forwarded-For获取(考虑代理场景)
|
||
|
||
4. **管理后台统计**:
|
||
- 使用INNER JOIN过滤无会议用户
|
||
- 时长汇总从audio_files.duration计算
|
||
- 最后登录时间从user_logs子查询获取
|