1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #ifndef JTJAI_MEDIA_CONFIG_H
- #define JTJAI_MEDIA_CONFIG_H
- #include <string>
- #include <vector>
- #include <boost/json.hpp>
- 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<StreamConfig>& 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<StreamConfig> 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
|