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

153 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 性能调优指南
## 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_count``retry_interval_ms` 的组合决定了重连行为
- 建议值:
- 稳定网络:重试 3 次,间隔 1000ms
- 不稳定网络:重试 5-10 次,间隔 2000-3000ms
### 优化建议
1. 网络优化
- 使用有线网络而不是无线网络
- 确保网络带宽充足
- 考虑使用 QoS 策略优先处理 RTSP 流量
2. 编码设置
- 使用 MJPEG 编码可以降低延迟
- H.264/H.265 编码可以节省带宽但会增加延迟
3. 分辨率与帧率
- 根据实际需求选择合适的分辨率和帧率
- 不要盲目追求高分辨率和高帧率
4. 内存管理
- 避免频繁的帧拷贝
- 考虑使用帧池来复用内存
### 性能监控
可以通过以下方式监控 RTSP 流的性能:
1. 帧率监控
```cpp
float current_fps = reader.getCurrentFps();
```
2. 连接状态监控
```cpp
bool is_connected = reader.isConnected();
```
### 常见问题解决
1. 画面卡顿
- 增加缓冲区大小
- 检查网络带宽
- 降低分辨率或帧率
2. 延迟过高
- 减小缓冲区大小
- 使用 MJPEG 编码
- 优化网络路径
3. 频繁断连
- 增加超时时间
- 调整重连策略
- 检查网络稳定性