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

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