sweeper_video/include/rtmp_manager.hpp
2025-10-14 17:44:59 +08:00

45 lines
1.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// rtsp_manager.hpp
#pragma once
#include <gst/gst.h>
#include "app_config.hpp"
#include <unordered_map>
#include <string>
#include <mutex>
#include <thread>
#include <atomic>
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<bool> running;
std::thread thread;
StreamContext() : running(false) {} // 确保 atomic 初始化
};
static std::unordered_map<std::string, StreamContext> 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);
};