- 创建基本项目结构和目录 - 添加CMake构建系统 - 实现基础的配置解析功能 - 添加YOLO推理框架支持 - 集成RTSP和视频流处理功能 - 添加性能监控和日志系统
153 lines
3.3 KiB
Markdown
153 lines
3.3 KiB
Markdown
# 性能调优指南
|
||
|
||
## 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. 频繁断连
|
||
- 增加超时时间
|
||
- 调整重连策略
|
||
- 检查网络稳定性
|