| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- #pragma once
- #include <QString>
- #include <QStandardPaths>
- #include <QDir>
- /**
- * @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 = 8000000; // 视频比特率 (8Mbps)
- 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()
|