networkconfig.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #pragma once
  2. #include <QString>
  3. #include <QStandardPaths>
  4. #include <QDir>
  5. /**
  6. * @brief 网络配置管理类
  7. *
  8. * 统一管理项目中所有的网络配置,包括:
  9. * - HTTP API 基础URL
  10. * - RTMP 推流服务器配置
  11. * - WebSocket 连接配置
  12. * - 其他网络相关配置
  13. */
  14. class NetworkConfig
  15. {
  16. public:
  17. /**
  18. * @brief 网络服务器配置结构
  19. */
  20. struct ServerConfig {
  21. QString host = "127.0.0.1"; // 服务器主机地址
  22. int port = 8200; // 服务器端口
  23. bool useHttps = false; // 是否使用HTTPS
  24. QString apiPath = "/api"; // API路径前缀
  25. QString getBaseUrl() const {
  26. QString protocol = useHttps ? "https" : "http";
  27. return QString("%1://%2:%3").arg(protocol, host).arg(port);
  28. }
  29. QString getWebSocketUrl() const {
  30. QString protocol = useHttps ? "wss" : "ws";
  31. return QString("%1://%2:%3").arg(protocol, host).arg(port);
  32. }
  33. };
  34. /**
  35. * @brief 流媒体协议枚举
  36. */
  37. enum class StreamProtocol {
  38. RTMP, // Real-Time Messaging Protocol
  39. SRT, // Secure Reliable Transport
  40. WebRTC, // Web Real-Time Communication
  41. RTSP, // Real Time Streaming Protocol
  42. UDP, // User Datagram Protocol
  43. TCP // Transmission Control Protocol
  44. };
  45. /**
  46. * @brief 通用流媒体配置结构
  47. */
  48. struct StreamConfig {
  49. StreamProtocol protocol = StreamProtocol::RTMP; // 流媒体协议
  50. QString host = "127.0.0.1"; // 服务器地址
  51. int port = 1935; // 端口
  52. QString app = "stream"; // 应用名/路径
  53. QString streamKey = "V1"; // 推流密钥/流名称
  54. QString getStreamUrl() const {
  55. switch (protocol) {
  56. case StreamProtocol::RTMP:
  57. return QString("rtmp://%1:%2/%3/%4").arg(host).arg(port).arg(app).arg(streamKey);
  58. case StreamProtocol::SRT:
  59. return QString("srt://%1:%2?streamid=%3/%4").arg(host).arg(port).arg(app).arg(streamKey);
  60. case StreamProtocol::RTSP:
  61. return QString("rtsp://%1:%2/%3/%4").arg(host).arg(port).arg(app).arg(streamKey);
  62. case StreamProtocol::UDP:
  63. return QString("udp://%1:%2").arg(host).arg(port);
  64. case StreamProtocol::TCP:
  65. return QString("tcp://%1:%2").arg(host).arg(port);
  66. case StreamProtocol::WebRTC:
  67. return QString("webrtc://%1:%2/%3/%4").arg(host).arg(port).arg(app).arg(streamKey);
  68. default:
  69. return QString("rtmp://%1:%2/%3/%4").arg(host).arg(port).arg(app).arg(streamKey);
  70. }
  71. }
  72. // 保持向后兼容的RTMP方法
  73. QString getRtmpUrl() const {
  74. return QString("rtmp://%1:%2/%3/%4").arg(host).arg(port).arg(app).arg(streamKey);
  75. }
  76. };
  77. /**
  78. * @brief 录制配置结构
  79. */
  80. struct RecordConfig {
  81. QString outputDir; // 录制输出目录
  82. int videoBitRate = 10000000; // 视频比特率 (10Mbps) - 为高分辨率提供更好画质支持
  83. int videoFrameRate = 30; // 视频帧率
  84. int videoQuality = 100; // 视频质量
  85. int audioBitRate = 128000; // 音频比特率 (128kbps)
  86. };
  87. public:
  88. /**
  89. * @brief 获取配置管理器单例
  90. */
  91. static NetworkConfig& instance();
  92. /**
  93. * @brief 重置为默认配置
  94. */
  95. void resetToDefaults();
  96. // 获取配置
  97. const ServerConfig& serverConfig() const { return m_serverConfig; }
  98. const StreamConfig& streamConfig() const { return m_streamConfig; }
  99. const RecordConfig& recordConfig() const { return m_recordConfig; }
  100. // 向后兼容的RTMP配置访问方法
  101. const StreamConfig& rtmpConfig() const { return m_streamConfig; }
  102. // 设置配置
  103. void setServerConfig(const ServerConfig& config);
  104. void setStreamConfig(const StreamConfig& config);
  105. void setRecordConfig(const RecordConfig& config);
  106. // 向后兼容的RTMP配置设置方法
  107. void setRtmpConfig(const StreamConfig& config);
  108. // 便捷方法
  109. QString getApiBaseUrl() const { return m_serverConfig.getBaseUrl(); }
  110. QString getWebSocketBaseUrl() const { return m_serverConfig.getWebSocketUrl(); }
  111. QString getStreamUrl() const { return m_streamConfig.getStreamUrl(); }
  112. // 向后兼容的RTMP方法
  113. QString getRtmpUrl(const QString& streamName = QString()) const;
  114. QString getRtmpStreamUrl() const;
  115. /**
  116. * @brief 检查网络配置是否有效
  117. */
  118. bool isValid() const;
  119. private:
  120. NetworkConfig() = default;
  121. ~NetworkConfig() = default;
  122. NetworkConfig(const NetworkConfig&) = delete;
  123. NetworkConfig& operator=(const NetworkConfig&) = delete;
  124. /**
  125. * @brief 初始化默认配置
  126. */
  127. void initDefaults();
  128. private:
  129. ServerConfig m_serverConfig;
  130. StreamConfig m_streamConfig;
  131. RecordConfig m_recordConfig;
  132. };
  133. // 便捷的全局访问宏
  134. #define NetworkConfigInstance NetworkConfig::instance()