// rtmp_manager.hpp #pragma once #include #include #include #include #include #include #include #include #include #include #include "app_config.hpp" #include "mqtt_client_wrapper.hpp" class RTMPManager { public: struct StreamResultInfo { int loc{-1}; std::string url; int result{1}; // 0=成功, 1=失败 std::string reason; }; static void init(); static void enqueue_video_push_request(const VideoPushRequest &req); static void stop_all(); private: struct StreamContext { std::atomic running{false}; std::thread thread; std::promise start_result; }; static void rtmp_worker_thread(); static StreamResultInfo start_camera(const Camera &cam, int streamType); static StreamResultInfo stop_camera(const Camera &cam, int streamType); static std::unordered_map> streams; static std::mutex streams_mutex; static std::queue request_queue; static std::mutex queue_mutex; static std::condition_variable queue_cv; static std::thread worker_thread; static std::atomic running; };