#ifndef JTJAI_MEDIA_CONFIG_H #define JTJAI_MEDIA_CONFIG_H #include #include #include namespace jtjai_media { struct StreamConfig { std::string rtsp_url; // RTSP流地址 int duration_seconds; // 访问时长(秒) double weight; // 访问权重 std::string output_filename; // 输出文件名 StreamConfig() = default; StreamConfig(const std::string& url, int duration, double w, const std::string& filename) : rtsp_url(url), duration_seconds(duration), weight(w), output_filename(filename) {} }; struct GlobalConfig { int total_poll_duration_seconds; // 总轮询时长(秒) int max_concurrent_streams; // 最大并发流数 std::string output_directory; // 输出目录 std::string report_filename; // 报告文件名 int connection_timeout_seconds; // 连接超时时间 int read_timeout_seconds; // 读取超时时间 int poll_cycles; // 轮询周期数(-1表示无限循环) int cycle_interval_seconds; // 轮询周期间隔(秒) GlobalConfig() : total_poll_duration_seconds(300) , max_concurrent_streams(10) , output_directory("./output") , report_filename("rtsp_report.json") , connection_timeout_seconds(10) , read_timeout_seconds(30) , poll_cycles(1) , cycle_interval_seconds(60) {} }; class ConfigManager { public: ConfigManager() = default; // 从JSON文件加载配置 bool load_from_file(const std::string& config_file); // 从JSON字符串加载配置 bool load_from_json(const std::string& json_str); // 保存配置到文件 bool save_to_file(const std::string& config_file) const; // 获取配置 const GlobalConfig& get_global_config() const { return global_config_; } const std::vector& get_stream_configs() const { return stream_configs_; } // 设置配置 void set_global_config(const GlobalConfig& config) { global_config_ = config; } void add_stream_config(const StreamConfig& config) { stream_configs_.push_back(config); } void clear_stream_configs() { stream_configs_.clear(); } // 验证配置有效性 bool validate() const; // 获取配置信息字符串 std::string to_string() const; private: GlobalConfig global_config_; std::vector stream_configs_; // JSON转换辅助函数 boost::json::object stream_config_to_json(const StreamConfig& config) const; StreamConfig stream_config_from_json(const boost::json::object& json_obj) const; boost::json::object global_config_to_json(const GlobalConfig& config) const; GlobalConfig global_config_from_json(const boost::json::object& json_obj) const; }; } // namespace jtjai_media #endif // JTJAI_MEDIA_CONFIG_H