rtsp_tensorrt/docs/performance_tuning.md
sladro e13cb3659c feat: 初始化项目结构
- 创建基本项目结构和目录
- 添加CMake构建系统
- 实现基础的配置解析功能
- 添加YOLO推理框架支持
- 集成RTSP和视频流处理功能
- 添加性能监控和日志系统
2024-12-24 16:25:03 +08:00

3.3 KiB
Raw Blame History

性能调优指南

1. 系统优化

1.1 GPU设置

  • 设置CUDA计算能力
  • GPU功耗模式调整
  • 显存预分配策略

1.2 系统配置

  • CPU频率调节
  • 系统IO优化
  • 网络参数调整

2. Pipeline优化

2.1 多线程优化

  • 线程池配置
  • 任务调度策略
  • 线程亲和性设置

2.2 内存优化

  • 零拷贝传输
  • 内存池管理
  • 显存复用策略

2.3 批处理优化

  • 动态批大小
  • 批处理超时设置
  • 帧积累策略

3. 推理优化

3.1 TensorRT优化

  • FP16/INT8量化
  • 动态Shape处理
  • Workspace大小设置

3.2 预处理优化

  • GPU预处理
  • 并行预处理
  • 数据预取

4. IO优化

4.1 输入优化

  • RTSP缓冲设置
  • 解码器选择
  • 帧采样策略

4.2 输出优化

  • 编码器参数
  • 推流缓冲
  • 写入策略

5. 监控与调试

5.1 性能指标

  • GPU利用率
  • 内存使用
  • 处理延迟
  • 吞吐量统计

5.2 性能分析

  • NVPROF分析
  • 内存泄漏检测
  • 性能瓶颈定位

RTSP 流读取优化

延迟与流畅度平衡

RTSP 流的读取性能主要受以下参数影响:

  1. 缓冲区大小 (buffer_size)

    • 较大的缓冲区可以提供更流畅的播放体验,但会增加延迟
    • 较小的缓冲区可以降低延迟,但可能导致画面卡顿
    • 建议值:
      • 低延迟场景5-10
      • 一般场景30
      • 高流畅度场景50-100
  2. 帧率控制 (target_fps)

    • 限制帧率可以减少系统资源占用
    • 建议根据实际需求设置,通常不需要超过显示器刷新率
    • 常见设置:
      • 监控场景15-20 fps
      • 一般场景25-30 fps
      • 高帧率场景60 fps
  3. 超时设置 (frame_timeout_ms)

    • 较短的超时时间可以更快地检测到连接问题
    • 较长的超时时间可以容忍网络波动
    • 建议值:
      • 局域网1000-2000 ms
      • 互联网3000-5000 ms
  4. 重连策略

    • max_retry_countretry_interval_ms 的组合决定了重连行为
    • 建议值:
      • 稳定网络:重试 3 次,间隔 1000ms
      • 不稳定网络:重试 5-10 次,间隔 2000-3000ms

优化建议

  1. 网络优化

    • 使用有线网络而不是无线网络
    • 确保网络带宽充足
    • 考虑使用 QoS 策略优先处理 RTSP 流量
  2. 编码设置

    • 使用 MJPEG 编码可以降低延迟
    • H.264/H.265 编码可以节省带宽但会增加延迟
  3. 分辨率与帧率

    • 根据实际需求选择合适的分辨率和帧率
    • 不要盲目追求高分辨率和高帧率
  4. 内存管理

    • 避免频繁的帧拷贝
    • 考虑使用帧池来复用内存

性能监控

可以通过以下方式监控 RTSP 流的性能:

  1. 帧率监控

    float current_fps = reader.getCurrentFps();
    
  2. 连接状态监控

    bool is_connected = reader.isConnected();
    

常见问题解决

  1. 画面卡顿

    • 增加缓冲区大小
    • 检查网络带宽
    • 降低分辨率或帧率
  2. 延迟过高

    • 减小缓冲区大小
    • 使用 MJPEG 编码
    • 优化网络路径
  3. 频繁断连

    • 增加超时时间
    • 调整重连策略
    • 检查网络稳定性