| 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
 |