imetting_backend/DEPLOYMENT_AUDIO_FEATURES.md

3.4 KiB
Raw Blame History

音频处理功能部署说明

1. 安装Python依赖

cd /Users/jiliu/工作/projects/imeeting/backend
pip install mutagen

2. 执行数据库迁移

2.1 创建用户日志表

mysql -u root -p imeeting < sql/migrations/create_user_logs_table.sql

2.2 为audio_files表添加duration字段

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子查询获取