#pragma once #include #include #include /** * @brief 网络配置管理类 * * 统一管理项目中所有的网络配置,包括: * - HTTP API 基础URL * - RTMP 推流服务器配置 * - WebSocket 连接配置 * - 其他网络相关配置 */ class NetworkConfig { public: /** * @brief 网络服务器配置结构 */ struct ServerConfig { QString host = "127.0.0.1"; // 服务器主机地址 int port = 8200; // 服务器端口 bool useHttps = false; // 是否使用HTTPS QString apiPath = "/api"; // API路径前缀 QString getBaseUrl() const { QString protocol = useHttps ? "https" : "http"; return QString("%1://%2:%3").arg(protocol, host).arg(port); } QString getWebSocketUrl() const { QString protocol = useHttps ? "wss" : "ws"; return QString("%1://%2:%3").arg(protocol, host).arg(port); } }; /** * @brief 流媒体协议枚举 */ enum class StreamProtocol { RTMP, // Real-Time Messaging Protocol SRT, // Secure Reliable Transport WebRTC, // Web Real-Time Communication RTSP, // Real Time Streaming Protocol UDP, // User Datagram Protocol TCP // Transmission Control Protocol }; /** * @brief 通用流媒体配置结构 */ struct StreamConfig { StreamProtocol protocol = StreamProtocol::RTMP; // 流媒体协议 QString host = "127.0.0.1"; // 服务器地址 int port = 1935; // 端口 QString app = "stream"; // 应用名/路径 QString streamKey = "V1"; // 推流密钥/流名称 QString getStreamUrl() const { switch (protocol) { case StreamProtocol::RTMP: return QString("rtmp://%1:%2/%3/%4").arg(host).arg(port).arg(app).arg(streamKey); case StreamProtocol::SRT: return QString("srt://%1:%2?streamid=%3/%4").arg(host).arg(port).arg(app).arg(streamKey); case StreamProtocol::RTSP: return QString("rtsp://%1:%2/%3/%4").arg(host).arg(port).arg(app).arg(streamKey); case StreamProtocol::UDP: return QString("udp://%1:%2").arg(host).arg(port); case StreamProtocol::TCP: return QString("tcp://%1:%2").arg(host).arg(port); case StreamProtocol::WebRTC: return QString("webrtc://%1:%2/%3/%4").arg(host).arg(port).arg(app).arg(streamKey); default: return QString("rtmp://%1:%2/%3/%4").arg(host).arg(port).arg(app).arg(streamKey); } } // 保持向后兼容的RTMP方法 QString getRtmpUrl() const { return QString("rtmp://%1:%2/%3/%4").arg(host).arg(port).arg(app).arg(streamKey); } }; /** * @brief 录制配置结构 */ struct RecordConfig { QString outputDir; // 录制输出目录 int videoBitRate = 10000000; // 视频比特率 (10Mbps) - 为高分辨率提供更好画质支持 int videoFrameRate = 30; // 视频帧率 int videoQuality = 100; // 视频质量 int audioBitRate = 128000; // 音频比特率 (128kbps) }; public: /** * @brief 获取配置管理器单例 */ static NetworkConfig& instance(); /** * @brief 重置为默认配置 */ void resetToDefaults(); // 获取配置 const ServerConfig& serverConfig() const { return m_serverConfig; } const StreamConfig& streamConfig() const { return m_streamConfig; } const RecordConfig& recordConfig() const { return m_recordConfig; } // 向后兼容的RTMP配置访问方法 const StreamConfig& rtmpConfig() const { return m_streamConfig; } // 设置配置 void setServerConfig(const ServerConfig& config); void setStreamConfig(const StreamConfig& config); void setRecordConfig(const RecordConfig& config); // 向后兼容的RTMP配置设置方法 void setRtmpConfig(const StreamConfig& config); // 便捷方法 QString getApiBaseUrl() const { return m_serverConfig.getBaseUrl(); } QString getWebSocketBaseUrl() const { return m_serverConfig.getWebSocketUrl(); } QString getStreamUrl() const { return m_streamConfig.getStreamUrl(); } // 向后兼容的RTMP方法 QString getRtmpUrl(const QString& streamName = QString()) const; QString getRtmpStreamUrl() const; /** * @brief 检查网络配置是否有效 */ bool isValid() const; private: NetworkConfig() = default; ~NetworkConfig() = default; NetworkConfig(const NetworkConfig&) = delete; NetworkConfig& operator=(const NetworkConfig&) = delete; /** * @brief 初始化默认配置 */ void initDefaults(); private: ServerConfig m_serverConfig; StreamConfig m_streamConfig; RecordConfig m_recordConfig; }; // 便捷的全局访问宏 #define NetworkConfigInstance NetworkConfig::instance()