- 创建基本项目结构和目录 - 添加CMake构建系统 - 实现基础的配置解析功能 - 添加YOLO推理框架支持 - 集成RTSP和视频流处理功能 - 添加性能监控和日志系统
74 lines
2.2 KiB
C++
74 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
#include <memory>
|
|
#include <chrono>
|
|
#include <thread>
|
|
#include <atomic>
|
|
#include <opencv2/videoio.hpp>
|
|
|
|
namespace pipeline {
|
|
|
|
class RtspReader {
|
|
public:
|
|
struct Config {
|
|
int buffer_size; // 缓冲区大小
|
|
int max_retry_count; // 最大重试次数
|
|
int retry_interval_ms; // 重试间隔(毫秒)
|
|
int frame_timeout_ms; // 读取帧超时时间(毫秒)
|
|
float target_fps; // 目标帧率
|
|
|
|
Config()
|
|
: buffer_size(30)
|
|
, max_retry_count(3)
|
|
, retry_interval_ms(1000)
|
|
, frame_timeout_ms(5000)
|
|
, target_fps(30.0f)
|
|
{}
|
|
};
|
|
|
|
explicit RtspReader(const Config& config = Config{});
|
|
~RtspReader();
|
|
|
|
// 禁用拷贝
|
|
RtspReader(const RtspReader&) = delete;
|
|
RtspReader& operator=(const RtspReader&) = delete;
|
|
|
|
// 连接RTSP流
|
|
bool connect(const std::string& url);
|
|
|
|
// 断开连接
|
|
void disconnect();
|
|
|
|
// 读取一帧(带超时和帧率控制)
|
|
bool read(cv::Mat& frame);
|
|
|
|
// 获取状态
|
|
bool isConnected() const { return is_connected_; }
|
|
std::string getUrl() const { return url_; }
|
|
float getCurrentFps() const { return current_fps_; }
|
|
|
|
private:
|
|
cv::VideoCapture cap_; // OpenCV视频捕获器
|
|
std::string url_; // RTSP URL
|
|
std::atomic<bool> is_connected_{false}; // 连接状态
|
|
Config config_; // 配置参数
|
|
cv::Mat mock_frame_; // 模拟帧(用于测试)
|
|
|
|
// 重连相关
|
|
int retry_count_{0}; // 当前重试次数
|
|
std::chrono::steady_clock::time_point last_retry_time_; // 上次重试时间
|
|
bool tryReconnect(); // 尝试重连
|
|
|
|
// 帧率控制相关
|
|
std::chrono::steady_clock::time_point last_frame_time_; // 上一帧时间
|
|
float current_fps_{0.0f}; // 当前帧率
|
|
void updateFrameRate(); // 更新帧率
|
|
void controlFrameRate(); // 控制帧率
|
|
|
|
// 设置RTSP流参数
|
|
void setRtspParams();
|
|
};
|
|
|
|
} // namespace pipeline
|