// rtsp_manager.hpp #pragma once #include #include "app_config.hpp" #include #include #include #include #include class RTMPManager { public: static void init(); // start/stop 增加 StreamType 参数 static void start_camera(const Camera &cam, StreamType type); static void stop_camera(const std::string &cam_name, StreamType type); static void stop_all(); static bool is_streaming(const std::string &cam_name, StreamType type); static bool is_any_streaming(); // 获取推流 URL,用于应答 static std::string get_stream_url(const std::string &cam_name, StreamType type); private: struct StreamContext { std::atomic running; std::thread thread; StreamContext() : running(false) {} // 确保 atomic 初始化 }; static std::unordered_map streams; static std::mutex streams_mutex; // stream loop 接收 StreamType 作为参数 static void stream_loop(Camera cam, StreamType type); static GstElement *create_pipeline(const Camera &cam, StreamType type); // 辅助:构建 map key static std::string make_stream_key(const std::string &cam_name, StreamType type); };