BodyBalanceEvaluation/document/视频推流和录制规则说明.md

7.8 KiB
Raw Permalink Blame History

视频推流和录制规则说明

概述

本文档详细说明了身体平衡评估系统的视频推流和录制功能规则,包括足部监视视频推流、深度相机视频推流、多路视频同步录制以及数据库存储规范。

功能架构

1. 视频推流功能

1.1 推流类型

  • 足部监视视频推流: 来自普通摄像头的足部监测画面
  • 深度相机视频推流: 来自FemtoBolt深度相机的身体姿态画面

1.2 推流技术规范

  • 传输协议: WebSocket
  • 推流格式: Base64编码的JPEG图像帧
  • 推流频率: 30 FPS
  • 线程模式: 独立线程处理,避免阻塞主程序
  • 目标端: 前端Web页面实时显示

1.3 推流实现方式

# 足部监视视频推流线程
def _camera_streaming_thread(self):
    # 从摄像头获取帧 → 编码 → WebSocket推送

# 深度相机视频推流线程  
def _femtobolt_streaming_thread(self):
    # 从FemtoBolt获取帧 → 编码 → WebSocket推送

2. 视频录制功能

2.1 录制类型

根据detection_sessions表结构,系统需要同步录制三种视频:

  1. 足部检测视频 (normal_video_path)

    • 数据源: 普通摄像头
    • 文件名: feet.mp4
    • 内容: 足部监测画面
  2. 深度相机视频 (femtobolt_video_path)

    • 数据源: FemtoBolt深度相机
    • 文件名: body.mp4
    • 内容: 身体姿态深度画面
  3. 屏幕录制视频 (screen_video_path)

    • 数据源: 前端界面录制
    • 文件名: screen.mp4
    • 内容: 完整的检测界面录制

2.2 存储路径规范

基础路径: data/patients/{患者ID}/{sessionID}/
├── feet.mp4          # 足部检测视频
├── body.mp4          # 深度相机视频
└── screen.mp4        # 屏幕录制视频

2.3 录制参数规范

  • 视频编码: H.264 (mp4v)
  • 分辨率:
    • 足部视频: 1280x720
    • 深度相机视频: 1920x1080 (根据FemtoBolt配置)
    • 屏幕录制: 根据前端界面尺寸
  • 帧率: 30 FPS
  • 音频: 不录制音频

核心方法设计

3.1 录制控制方法

3.1.1 start_recording方法

def start_recording(self, session_id: str, patient_id: str) -> Dict[str, bool]:
    """
    同步启动三个视频录制功能
    
    Args:
        session_id: 检测会话ID
        patient_id: 患者ID
        
    Returns:
        Dict: 各录制任务的启动状态
        {
            'feet_recording': bool,
            'body_recording': bool, 
            'screen_recording': bool,
            'session_updated': bool
        }
    """

功能流程:

  1. 创建录制目录: data/patients/{patient_id}/{session_id}/
  2. 初始化三个VideoWriter对象
  3. 启动三个录制线程
  4. 更新detection_sessions表的视频路径字段
  5. 返回启动状态

3.1.2 stop_recording方法

def stop_recording(self, session_id: str) -> Dict[str, Any]:
    """
    同步停止所有视频录制
    
    Args:
        session_id: 检测会话ID
        
    Returns:
        Dict: 录制结果信息
        {
            'status': 'success'|'failed',
            'video_files': {
                'feet_video': str,
                'body_video': str,
                'screen_video': str
            },
            'file_sizes': Dict[str, int],
            'duration': int
        }
    """

功能流程:

  1. 停止所有录制线程
  2. 释放VideoWriter资源
  3. 检查录制文件完整性
  4. 更新detection_sessions表的结束时间和持续时间
  5. 返回录制结果

3.2 推流控制方法

3.2.1 start_streaming方法

def start_streaming(self) -> Dict[str, bool]:
    """
    启动视频推流
    
    Returns:
        Dict: 推流启动状态
        {
            'camera_streaming': bool,
            'femtobolt_streaming': bool
        }
    """

3.2.2 stop_streaming方法

def stop_streaming(self) -> bool:
    """
    停止所有视频推流
    
    Returns:
        bool: 停止操作是否成功
    """

数据库集成规范

4.1 detection_sessions表字段映射

字段名 数据类型 说明 录制对应
normal_video_path TEXT 足部检测视频路径 feet.mp4
femtobolt_video_path TEXT 深度相机视频路径 body.mp4
screen_video_path TEXT 屏幕录制视频路径 screen.mp4
start_time TIMESTAMP 检测开始时间 录制开始时间
end_time TIMESTAMP 检测结束时间 录制结束时间
duration INTEGER 检测持续时间(秒) 录制持续时间
status TEXT 会话状态 recording/completed

4.2 数据库操作时机

4.2.1 录制开始时

UPDATE detection_sessions SET 
    normal_video_path = 'data/patients/{patient_id}/{session_id}/feet.mp4',
    femtobolt_video_path = 'data/patients/{patient_id}/{session_id}/body.mp4',
    screen_video_path = 'data/patients/{patient_id}/{session_id}/screen.mp4',
    start_time = CURRENT_TIMESTAMP,
    status = 'recording'
WHERE id = '{session_id}'

4.2.2 录制结束时

UPDATE detection_sessions SET 
    end_time = CURRENT_TIMESTAMP,
    duration = CAST((julianday(CURRENT_TIMESTAMP) - julianday(start_time)) * 86400 AS INTEGER),
    status = 'completed'
WHERE id = '{session_id}'

线程管理规范

5.1 推流线程

  • 线程名称: camera_streaming_thread, femtobolt_streaming_thread
  • 线程类型: daemon线程
  • 生命周期: 与推流状态同步
  • 异常处理: 线程内部捕获异常,记录日志,不影响主程序

5.2 录制线程

  • 线程名称: feet_recording_thread, body_recording_thread, screen_recording_thread
  • 线程类型: 非daemon线程确保录制完整性
  • 同步机制: 使用threading.Event控制启停
  • 资源管理: 确保VideoWriter正确释放

错误处理和异常情况

6.1 设备异常处理

  • 摄像头断开: 停止对应推流/录制,记录错误日志
  • FemtoBolt设备异常: 降级到普通摄像头模式
  • 存储空间不足: 停止录制,保存已录制内容

6.2 网络异常处理

  • WebSocket连接断开: 自动重连机制
  • 推流延迟过高: 降低推流质量或帧率

6.3 文件系统异常

  • 目录创建失败: 使用备用路径
  • 文件写入失败: 记录错误,尝试恢复
  • 磁盘空间监控: 预警机制

性能优化策略

7.1 内存管理

  • 帧缓冲区大小限制
  • 及时释放图像数据
  • 内存使用监控

7.2 CPU优化

  • 多线程并行处理
  • 图像编码优化
  • 帧率自适应调整

7.3 存储优化

  • 视频压缩参数调优
  • 分段录制避免大文件
  • 异步写入机制

配置参数

8.1 推流配置

STREAMING_CONFIG = {
    'fps': 30,
    'quality': 80,  # JPEG质量
    'max_frame_buffer': 10,
    'reconnect_interval': 5  # 秒
}

8.2 录制配置

RECORDING_CONFIG = {
    'fps': 30,
    'codec': 'mp4v',
    'max_file_size': 1024 * 1024 * 1024,  # 1GB
    'segment_duration': 600  # 10分钟分段
}

测试验证

9.1 功能测试

  • 单独推流测试
  • 同步录制测试
  • 数据库更新测试
  • 异常恢复测试

9.2 性能测试

  • 长时间录制稳定性
  • 多路并发性能
  • 内存泄漏检测
  • 存储空间使用

9.3 兼容性测试

  • 不同设备组合
  • 不同分辨率支持
  • 浏览器兼容性

部署注意事项

  1. 依赖库: 确保OpenCV、WebSocket库版本兼容
  2. 权限设置: 摄像头访问权限、文件写入权限
  3. 防火墙: WebSocket端口开放
  4. 存储规划: 预估存储空间需求
  5. 备份策略: 重要录制文件的备份机制

本文档版本: 1.0
最后更新: 2025年08月03日
维护人员: 系统开发团队