#pragma once #include #include #include #include #include #include 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 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