同UCanCode一起释放 Visual C++, C# 的巨大能量!
UCCRemote 文档

UCC Remote 项目文档

工业级 P2P 远程桌面 — 穿透优先、自建可控、端到端加密,一套客户端完成被控与控制。

Qt 5.15.2 qmake + MinGW 64-bit C++17 Windows P2P / Relay / TURN

UCC Remote

工业级 P2P 远程桌面 — 完整项目技术文档

Qt 5.15.2MinGW64qmakeWindows

1. 项目基础信息

1.1 项目名称

UCC Remote(可执行文件:UCCRemote.exe

1.2 项目简介

UCC Remote 是一款面向工业/企业场景的 点对点(P2P)远程桌面 软件,采用 TeamViewer / ToDesk 风格的 统一客户端 设计:同一安装包既可作为被控端(Host),也可作为控制端(Viewer),运行时通过界面开关切换,无需分别安装两个程序。

项目基于 Qt 5.15.2 + MinGW 8.1 64-bit 构建,使用 qmake 工程管理,支持中文界面(uccremote_zh_CN.qm),具备屏幕共享、远程键鼠控制、剪贴板同步、断点续传文件传输等企业级远程协作能力。

1.3 核心功能

🖥 远程桌面

DXGI Desktop Duplication 屏幕采集,H.264(x264/NVENC)编码,OpenGL / D3D11 硬件解码渲染,支持多显示器切换。

🔗 P2P 连接

KCP → UDT → UCC Relay → coturn 四级连接级联,STUN 打洞,TLS 信令,AES-256-HMAC 媒体加密。

📋 剪贴板同步

双向文本剪贴板实时同步(ClipboardSync),可在设置中开关。

📁 文件传输

48KB 分块流式传输,逐块 ACK 确认,SHA-256 完整性校验,支持断点续传(FileResume)。

🔐 安全认证

设备码 + 临时密码,X25519 ECDH 会话密钥协商,HMAC-SHA256 认证标签,TLS 信令通道。

⚡ 自适应 QoS

RTT/抖动/丢包率反馈,动态调整码率、帧率、缩放比例;NACK 重传 + XOR/RS-FEC 前向纠错。

1.4 解决的核心问题

  • 复杂 NAT 穿透:通过 STUN 打洞、KCP/UDT 双协议、自建 UDP/WebSocket 中继及可选 coturn TURN,覆盖 LAN/WAN 多种网络环境。
  • 低延迟高画质:GPU 零拷贝 DXGI→NVENC 管线、脏矩形增量传输、双通道 KCP(控制/视频分离)、解码线程 offload。
  • 部署简便:单文件夹部署,LAN 信标自动发现信令服务器,无需每台机器单独配置 IP。
  • 工业稳定性:信令心跳重连、会话自动重连、DXGI 访问丢失恢复、传输层 rehome、单实例锁。
  • 安全合规:端到端 AES 加密、ECDH 密钥交换、入站连接审批/无人值守模式、跨账户 CONNECT 拒绝。

2. 环境与安装

2.1 依赖环境要求

组件版本/要求说明
操作系统Windows 7 SP1+(推荐 Win10/11)主要目标平台,需 DXGI/D3D11 支持
Qt5.15.2 mingw81_64模块:Core, Gui, Widgets, Network, OpenGL, WebSockets
编译器MinGW 8.1.0 64-bit路径:C:\Qt\Tools\mingw810_64
构建工具qmake + mingw32-makeC++17 标准
Python3.x翻译填充脚本 fill_zh_cn_translations.py
OpenSSL3.x(静态/动态)third_party/openssl-mingw64,TLS 信令
FFmpeg静态库(可选但推荐)third_party/ffmpeg-static,H.264 编解码
libyuv静态库third_party/libyuv-static,YUV 色彩转换
libudt可选third_party/libudt,UDT 传输备选
GPUNVIDIA(可选)NVENC 硬件编码,无则回退 x264 软编

2.2 本地编译步骤

方式一:一键构建(推荐)

cd d:\UCC_QT\UCCRemote
scripts\build_and_deploy.bat [输出目录]

# 默认输出:C:\uccremote_out
# 自定义输出:scripts\build_and_deploy.bat C:\newout

该脚本自动完成:libyuv 静态编译 → FFmpeg 检测 → 翻译更新(lupdate/lrelease)→ UCCRemote Release 编译 → UCCSignaling/UCCRelay/UCCWsRelay 编译 → TLS 证书生成 → windeployqt 打包 → 部署脚本复制。

方式二:Qt Creator 手动构建

# 1. 打开 UCCRemote.pro
# 2. 配置 Kit:Desktop Qt 5.15.2 MinGW 64-bit
# 3. Release 模式构建
# 4. Release 构建会自动复制 exe 到 C:/newout(需先运行过一次 build_and_deploy.bat)

cd build
qmake ..\UCCRemote.pro -spec win32-g++ "CONFIG+=release" ^
  "FFMPEG_DIR=..\third_party\ffmpeg-static" ^
  "OPENSSL_DIR=..\third_party\openssl-mingw64"
mingw32-make -j4

可选:单独构建第三方库

scripts\build_libyuv_static.bat      # libyuv 静态库
scripts\build_ffmpeg_static.bat      # FFmpeg 静态库(H.264)
scripts\build_libudt_mingw.bat       # libudt(UDT 传输)
scripts\build_all.bat                # 全部构建
scripts\gen_certs.bat                # 生成 TLS 证书

2.3 部署/安装步骤

生产环境两步部署(TeamViewer 风格):

步骤 1 — 在局域网内 一台 PC 上启动信令服务:
cd C:\newout && start_signaling.bat(保持窗口打开)

步骤 2 — 在 所有 PC 上双击 UCCRemote.exe
客户端自动通过 LAN 信标或 127.0.0.1 发现信令服务器。

部署目录结构

C:\newout\
├── UCCRemote.exe              # 统一客户端
├── start_signaling.bat        # 信令+中继启动脚本
├── Qt5*.dll                   # Qt 运行时
├── libcrypto-3-x64.dll        # OpenSSL
├── libssl-3-x64.dll
├── libgcc_s_seh-1.dll         # MinGW 运行时
├── libstdc++-6.dll
├── libwinpthread-1.dll
├── certs\                     # TLS 证书
│   ├── ca.crt
│   ├── signaling.crt
│   └── signaling.key
├── translations\
│   └── uccremote_zh_CN.qm     # 中文界面
├── server\
│   ├── UCCSignaling.exe       # 信令服务器 (21080/TCP)
│   ├── UCCRelay.exe           # UDP 中继 (21081/UDP)
│   ├── UCCWsRelay.exe         # WebSocket 中继 (21082)
│   └── certs\
└── *.ps1                      # LAN 发现/信标脚本

同机测试

start_signaling.bat
UCCRemote.exe

2.4 TLS 证书配置

开发/测试环境由 scripts\gen_certs.bat 自动生成自签名证书到 certs/ 目录。生产环境应替换为正式 CA 签发的证书:

  • certs/ca.crt — CA 根证书(客户端信任)
  • certs/signaling.crt + signaling.key — 信令服务器证书

客户端启动时调用 TlsConfig::ensureDefaultCerts() 确保证书可用。

3. 使用指南

3.1 快速开始

  1. 在一台 PC 运行 start_signaling.bat 启动信令与中继服务。
  2. 被控 PC:启动 UCCRemote.exe → 勾选 「允许远程控制」 → 记录设备码和临时密码。
  3. 控制 PC:启动 UCCRemote.exe → 输入对方设备码和密码 → 点击 「连接」
  4. 连接成功后自动打开远程桌面窗口,可进行键鼠操作、文件传输、剪贴板同步。

3.2 被控端(Host)操作

操作说明
允许远程控制主界面开关,开启后注册到信令服务器并等待入站连接
设备码9 位数字 ID(如 988 008 226),唯一标识本机
临时密码会话密码,可手动刷新;正确密码可自动接受连接
二维码生成含 uccremote:// URI 的 QR 码供控制端扫描
无人值守设置中开启后,密码正确时跳过手动审批
入站审批密码错误时弹出倒计时审批对话框(默认 30 秒超时拒绝)
系统托盘关闭窗口可最小化到托盘(可配置),入站请求时气泡通知+声音提醒
Host 控制栏会话期间显示断开按钮,被控端可随时终止远程连接

3.3 控制端(Viewer)操作

操作说明
远程连接输入设备码 + 密码,通过信令服务器查找对端并建立 P2P
直连连接输入 IP:端口 直接 TCP/KCP 连接(绕过信令)
粘贴连接 URI支持 uccremote://设备码?pwd=密码 格式
远程桌面窗口工具栏:断开、全屏(Esc 退出)、显示器切换、会话统计
发送文件选择本地文件发送到被控端
剪贴板同步勾选后双向同步文本剪贴板
聊天会话内文本消息
自动重连意外断开后自动尝试重连(TeamViewer 风格)

3.4 设置页面说明

设置项配置键说明
信令地址signaling/endpoint信令服务器 host:port,默认自动发现
TLSsignaling/tls信令通道是否启用 TLS
WebSocket 模式signaling/websocket使用 WS/WSS 信令及 WS 中继回退
仅 P2Pconnection/p2p_only优先直连,禁用中继回退
双通道 KCPconnection/dual_channel_kcp控制/视频分离 conv(默认开启)
视频 FECconnection/video_fecXOR 前向纠错(WAN 有效)
RS-FECconnection/video_fec_rsReed-Solomon RS(4,2) 纠错
采集显示器capture/monitor_index多显示器选择
画质预设video/quality_presetAuto/Speed/Balanced/Quality
场景配置profile/scenario最佳画质/办公 WAN/均衡/低带宽/移动慢网
GPU 编码video/gpu_encodeNVENC 硬件编码
硬件解码video/hardware_decodeD3D11VA H.264 解码
OpenGL 渲染remote/use_opengl远程桌面 OpenGL 渲染(默认开启)
语言ui/languageen / zh_CN
开机自启general/auto_startWindows 登录自启动
入站审批超时incoming/approval_timeout_sec5–300 秒
coturncoturn/host,port,user,pass标准 TURN 服务器配置

配置存储于 INI 格式用户设置文件(AppRuntime::userSettings()),默认数据目录由 AppRuntime::defaultUnifiedDataDir() 决定,可通过 --datadir= 覆盖。

3.5 命令行参数

参数说明
--datadir=<path>指定用户配置/数据目录
--connect-remote=<设备码:密码>无 GUI 自动连接远程
--signaling=<host:port>指定信令服务器
--ensure-firewall-rule安装 Windows 防火墙规则(需管理员)
--verify-e2e端到端传输验证
--test-capture屏幕采集测试
--test-capture-stream采集流测试(支持 --monitor, --capture-fps 等)
--test-host无 GUI Host 待机模式
--test-transmit本地传输验证
--test-transmit-h264H.264 传输验证
--test-transmit-dual双通道传输验证
--test-remote-display远程显示 GUI 测试
--test-direct-viewer直连 Viewer 测试
--role host|viewer旧版分离角色模式(已弃用,默认统一客户端)

3.6 连接 URI 格式

uccremote://988008226?pwd=yhjm2mxx

解析器:ConnectionUriParsersrc/core/connectionuri.cpp)。支持从剪贴板粘贴或 QR 码扫描导入。

4. 技术架构

4.1 整体架构图

┌─────────────────────────────────────────────────────────────────┐
│                        UCCRemote.exe (统一客户端)                  │
├──────────────┬──────────────────────────────────────────────────┤
│   UI 层       │ MainWindow / RemoteWindow / SystemTray / Dialogs │
├──────────────┼──────────────────────────────────────────────────┤
│   会话层      │ RemoteSession / SessionIoPump / VideoEncodeWorker │
│              │ VideoDecodeWorker / ClipboardSync / FileTransfer  │
├──────────────┼──────────────────────────────────────────────────┤
│   连接层      │ ConnectionManager / SignalingRegistrar / P2pConnector│
├──────────────┼──────────────────────────────────────────────────┤
│   传输层      │ SecureChannel → KCP / TCP / UDT / Relay / WS-Relay│
│              │ DualChannelTransport / TcpDualChannelTransport     │
├──────────────┼──────────────────────────────────────────────────┤
│   媒体层      │ DXGI/GDI Capture → FFmpeg Encoder/Decoder          │
│              │ D3D11 GPU Context / AdaptiveQoS / libyuv           │
├──────────────┼──────────────────────────────────────────────────┤
│   安全层      │ AES-256-HMAC / X25519 ECDH / SessionAuth / TLS     │
└──────────────┴──────────────────────────────────────────────────┘
                              │
                    TLS 信令 (21080) / UDP 中继 (21081)
                              │
┌─────────────────────────────┴───────────────────────────────────┐
│  UCCSignaling.exe  │  UCCRelay.exe  │  UCCWsRelay.exe  │ coturn │
└─────────────────────────────────────────────────────────────────┘

4.2 连接建立流程

  1. 信令注册SignalingRegistrar 通过 TLS/WebSocket 连接信令服务器,发送 REGISTER + 15s 心跳 PING/PONG。
  2. 发起连接:控制端发送 CONNECT 命令,信令服务器返回 PeerInfo(含公网地址、路径类型)。
  3. 连接级联ConnectionManager 按优先级尝试:
    • P2P KCP + STUN 打洞
    • P2P UDT rendezvous
    • UCC UDP Relay(21081,Token 配对)
    • WebSocket Relay(21082)
    • coturn TURN(3478/UDP,可选)
  4. 安全握手SecureChannel AES-256-HMAC 加密 → RemoteSession Handshake/HandshakeAck(含 ECDH 公钥、会话认证标签)。
  5. 会话激活:双方 SessionReady → Host 开始 Desktop Duplication 采集 → Viewer 打开远程窗口。

4.3 代码目录结构

UCCRemote/
├── main.cpp                    # 程序入口(GUI + 测试模式分发)
├── mainwindow.cpp/h            # 主窗口(三页导航:首页/设备/设置)
├── UCCRemote.pro               # qmake 主工程文件
├── uccremote.qrc               # Qt 资源(图标等)
├── translations/
│   └── uccremote_zh_CN.ts/qm   # 中文翻译
├── certs/                      # TLS 证书
├── images/                     # 应用图标
├── docs/                       # 文档
├── scripts/                    # 构建/部署脚本
│   ├── build_and_deploy.bat
│   ├── gen_certs.bat
│   └── deploy/                 # 部署辅助脚本
├── server/                     # 服务端子工程
│   ├── UCCSignaling.pro        # 信令服务器
│   ├── UCCRelay.pro            # UDP 中继
│   ├── UCCWsRelay.pro          # WebSocket 中继
│   └── signaling_server.cpp
├── third_party/                # 第三方库
│   ├── kcp/                    # KCP 协议 (ikcp.c)
│   ├── qrcodegen/              # QR 码生成
│   ├── ffmpeg-static/          # FFmpeg 静态库
│   ├── libyuv-static/          # libyuv 静态库
│   ├── openssl-mingw64/        # OpenSSL
│   └── libudt/                 # UDT 库(可选)
└── src/                        # 核心源码
    ├── core/                   # 核心配置与协议
    ├── crypto/                 # 加密模块
    ├── net/                    # 网络基础(TLS, FEC)
    ├── p2p/                    # P2P 连接器
    ├── signaling/              # 信令客户端
    ├── transport/              # 传输层抽象
    ├── relay/                  # 中继协议
    ├── turn/                   # coturn 客户端
    ├── capture/                # 屏幕采集
    ├── codec/                  # 音视频编解码
    ├── session/                # 远程会话
    ├── input/                  # 输入注入
    ├── clipboard/              # 剪贴板同步
    ├── file/                   # 文件传输
    ├── ui/                     # UI 组件
    ├── util/                   # 工具类
    └── tools/                  # 测试/验证工具

4.4 核心模块说明

core/ — 核心基础设施

文件职责
protocol.h/cppUCC1 二进制协议:消息类型定义、打包/解包(Handshake, VideoFrame, QoS, File 等 28 种消息)
appconfig.h/cpp全局配置读写(QSettings),画质/连接/信令/coturn 等 50+ 配置项
appruntime.h/cpp运行时初始化:统一客户端模式、数据目录、单实例键、命令行参数解析
connectionmanager.h/cpp连接编排:信令查找 → P2P 级联 → SecureChannel 包装 → RemoteSession 创建
deviceid.h/cpp9 位设备 ID 生成/验证/格式化
sessionpassword.h/cpp临时会话密码生成与管理
connectionuri.h/cppuccremote:// URI 解析
adaptiveqos.h/cpp自适应 QoS:带宽/丢包/RTT 反馈 → 码率/帧率/缩放建议
profilepreset.h/cpp5 种场景预设(最佳画质/办公 WAN/均衡/低带宽/移动慢网)
signalingbootstrap.h/cpp统一客户端信令自举(LAN 发现/默认端点)
accountsession.h/cpp账户登录/Token 管理/绑定设备列表
settingsmigrate.h/cpp旧版设置迁移
videostreamconfig.h/cpp视频流参数计算(分辨率/码率/FPS 表)

signaling/ — 信令子系统

文件职责
signalingprotocol.h/cpp文本行协议:Register/Login/Connect/PeerInfo/Punch/RelayInfo/Ping/Pong 等命令
signalingregistrar.h/cpp持久信令连接:注册、心跳(15s PING)、自动重连(指数退避)、入站 CONNECT 通知
signalinglink.h/cpp底层 TLS TCP / WebSocket 连接封装
signalinglinebuffer.h/cpp行缓冲解析器
signalingclient.h/cpp一次性信令客户端(CONNECT 请求)

transport/ — 传输层

文件职责
itransport.h传输抽象接口:write() / takeReceived() / isOpen()
securechannel.h/cppAES-256-HMAC 加密包装,支持控制/视频双通道加密
kcptransport.h/cppKCP over UDP(基于 ikcp.c),低延迟可靠传输
tcptransport.h/cppTCP 流传输
udttransport.h/cppUDT 传输(libudt,可选编译)
relaytransport.h/cppUCC UDP 中继客户端
wsrelaytransport.h/cppWebSocket 中继客户端
websockettransport.h/cppWebSocket 通用传输
dualchanneltransport.h/cpp双 KCP conv 复用(控制 conv + 视频 conv ^ 0x56CC56CC)
tcpdualchanneltransport.h/cppTCP 双通道复用(控制/视频帧类型前缀)
transportrehome.h/cpp传输层热迁移(不断会话切换底层 socket)

p2p/ — P2P 连接

文件职责
p2pconnector.h/cpp核心 P2P 连接器:STUN 发现、UDP 打洞、TCP/KCP 连接、被动监听
stunclient.h/cppSTUN 客户端(默认 stun.l.google.com:19302)
p2putil.h/cppP2P 工具函数(探针握手、地址解析)

capture/ — 屏幕采集

文件职责
capturefactory.h/cpp采集后端工厂:自动选择 DXGI / GDI
dxgicapture.h/cppDXGI Desktop Duplication(主采集方式,支持脏矩形)
gdicapture.h/cppGDI BitBlt 采集(回退/测试)
capturescheduler.h/cpp采集帧率调度器
monitorinfo.h/cpp多显示器枚举
captureexclude_win.h/cpp排除本应用窗口避免反馈环
dxgicursor.h/cppDXGI 光标叠加

codec/ — 编解码

文件职责
ffmpegencoder.h/cppH.264 编码(x264 软编 / NVENC 硬编),低延迟参数(bframes=0, rc-lookahead=0)
ffmpegdecoder.h/cppH.264 解码(软解 / D3D11VA 硬解)
d3d11gpucontext.h/cppD3D11 GPU 上下文:BGRA→NV12 零拷贝转换

session/ — 远程会话

文件职责
remotesession.h/cpp核心会话引擎:握手、桌面共享、视频帧收发、QoS、FEC/NACK、输入/聊天/文件
sessioniopump.h/cppIO 泵:独立线程处理入站/出站队列,优先级调度(输入 > 控制 > 视频)
videoencodeworker.h/cpp编码工作线程(Host 端 offload)
videodecodeworker.h/cpp解码工作线程(Viewer 端 offload,队列深度 2 丢弃旧帧)

ui/ — 用户界面

文件职责
mainwindow.cpp/h主窗口:三页导航、连接管理、设置、会话生命周期
remotewindow.h/cpp远程桌面窗口:帧渲染、输入捕获、工具栏
remotedesktopglwidget.h/cppOpenGL 远程桌面渲染(默认)
remotedesktopd3d11widget.h/cppD3D11 远程桌面渲染(硬解路径)
hostcontrolbar.h/cpp被控端会话控制栏
incomingconnectdialog.h/cpp入站连接审批对话框
deviceqrdialog.h/cpp设备 QR 码对话框
logindialog.h/cpp账户登录对话框
systemtray.h/cpp系统托盘图标与菜单

其他模块

目录职责
crypto/AES-256-HMAC 加解密、X25519 ECDH 密钥交换、HMAC-SHA256 会话认证
net/TLS 配置、GF(256) 运算、Reed-Solomon FEC、WebSocket 端点
relay/UDP 中继协议(Token 配对、数据转发)
turn/coturn TURN 客户端(RFC 5766)
input/Windows 输入注入(SendInput:鼠标/键盘/滚轮)
clipboard/剪贴板双向同步
file/文件传输(48KB 分块、滑动窗口 8、断点续传、SHA-256 校验)
util/单实例锁、开机自启、防火墙规则、语言管理、提示音
tools/E2E 验证、远程显示测试、采集测试

4.5 通信协议

应用层协议(UCC1 帧格式)

所有会话消息使用 packMessage(MessageType, payload) 封装,前缀魔数 UCC1,支持 28 种消息类型:

类型方向说明
Handshake1双向会话握手(屏幕尺寸、DPI、ECDH 公钥、显示器列表)
HandshakeAck2双向握手确认 + sessionAuthTag
StartDesktop / StopDesktop3/4Viewer→Host开始/停止桌面共享
VideoFrame5Host→ViewerH.264 全帧 / JPEG 或 H.264 增量 tile
QoSFeedback6Viewer→HostRTT/抖动/丢包/建议码率
InputMouse / InputKey7/8Viewer→Host远程键鼠输入
Chat9双向文本聊天
Ping / Pong10/11双向会话保活
Clipboard13双向剪贴板数据
FileOffer/Chunk/Ack/Complete/Reject/Resume14–19双向文件传输协议
RequestKeyframe20Viewer→Host请求 IDR 关键帧
NackFrames21Viewer→Host丢帧 NACK(Host 缓存最近 90 帧重传)
VideoFec22Host→ViewerXOR/RS 前向纠错
SelectMonitor23Viewer→Host远程切换显示器
SessionReady24双向会话就绪信号
CursorUpdate28Host→Viewer独立光标层(位置+PNG 形状)

信令协议(文本行)

格式:COMMAND arg1 arg2 ...\n,主要命令:

REGISTER <deviceId> <role> <deviceName>
LOGIN <username> <password>
CONNECT <peerDeviceId> <mode> [<sessionPassword>]
PEER_INFO <deviceId> <publicHost> <publicPort> <udpPort> <path> ...
PUNCH <peerHost> <peerPort>
RELAY_INFO <relayHost> <relayPort> <token>
PING / PONG

4.6 传输层级联策略

优先级路径协议适用场景
1P2P KCPUDP + KCP + STUN大多数 NAT 环境,低延迟
2P2P UDTUDP + UDTKCP 失败时的备选
3P2P TCPTCP 打洞LAN / 友好 NAT
4UCC RelayUDP 21081对称 NAT / 打洞失败
5WS RelayWebSocket 21082企业防火墙/代理环境
6coturnTURN 3478/UDP标准 TURN 回退

4.7 服务端组件

二进制端口工程职责
UCCSignaling.exe21080/TCP (TLS)server/UCCSignaling.pro设备注册、在线状态、CONNECT 路由、Relay 分配、120s 空闲断开
UCCRelay.exe21081/UDPserver/UCCRelay.proToken 配对 UDP 中继(TURN-like)
UCCWsRelay.exe21082/TCPserver/UCCWsRelay.proWebSocket 中继(企业网络回退)
coturn (可选)3478/UDP外部标准 RFC 5766 TURN 服务器

4.8 安全机制

  • 信令 TLS:SignalingLink 使用 OpenSSL TLS 1.2+ 加密信令通道
  • 媒体 AES-256-HMAC:SecureChannel 对所有会话数据 AES-256-CBC + HMAC-SHA256 认证
  • ECDH 密钥交换:X25519 + HKDF 派生会话密钥,替代共享密码(SessionKeyExchange)
  • 会话认证:HMAC-SHA256 sessionAuthTag 防止中间人(SessionAuth)
  • 设备码 + 密码:9 位设备 ID + 临时会话密码双重验证
  • 入站审批:密码不匹配时需人工确认,超时自动拒绝
  • 跨账户保护:无会话密码时跨账户 CONNECT 被拒绝
  • 单实例:SingleInstance 防止同一角色多开
  • 防火墙:--ensure-firewall-rule 自动添加 Windows 防火墙入站规则

5. 附录

5.1 端口一览

端口协议服务方向
21080TCP (TLS)UCCSignaling客户端 → 信令服务器
21081UDPUCCRelay客户端 ↔ 中继
21082TCP (WS)UCCWsRelay客户端 ↔ WS 中继
3478UDPcoturn (可选)客户端 ↔ TURN
19302UDPGoogle STUN客户端 → STUN(NAT 探测)
动态UDP/TCPUCCRemote P2P客户端 ↔ 客户端(打洞后)

5.2 第三方依赖

用途位置编译宏
Qt 5.15.2GUI/网络/事件循环系统安装
OpenSSL 3.xTLS + ECDH + HMACthird_party/openssl-mingw64UCC_USE_OPENSSL
FFmpegH.264 编解码third_party/ffmpeg-staticUCC_USE_FFMPEG, UCC_FFMPEG_STATIC
libyuvYUV/RGB 转换third_party/libyuv-staticUCC_USE_LIBYUV
KCP (ikcp)可靠 UDP 传输third_party/kcp内置
libudtUDT 传输third_party/libudtUCC_USE_LIBUDT
qrcodegenQR 码生成third_party/qrcodegen内置
x264H.264 软编码FFmpeg 静态链接

5.3 功能路线图(已实现)

阶段功能状态
P0出站优先级队列、解码工作线程、QoS 丢包反馈、DXGI 恢复✅ 已实现
P1脏矩形增量、OpenGL 渲染、x264 低延迟、关键帧请求✅ 已实现
P2ECDH 会话密钥、双 KCP 通道、XOR/RS FEC、NACK 重传、多显示器、DPI 映射✅ 已实现
P3E2E 验证脚本、NVENC 探测、文件 E2E、信令日志、自动重连✅ 已实现

5.4 生产部署检查清单

  • 修改默认密码(AppConfig::defaultPassphrase()
  • 替换 certs/ 为正式 CA 证书
  • 在 VPS 部署 UCCSignaling + UCCRelay
  • 开放 TCP 21080、UDP 21081、UDP 3478(如用 coturn)
  • 被控端安装 NVENC 版 FFmpeg 以启用硬件编码
  • 运行 E2E 验证:verify_e2e_p2p.bat

5.5 线程模型

  • GUI 线程:MainWindow、RemoteWindow、设置 UI、帧显示
  • Net 线程:P2pConnector、ConnectionManager、SignalingRegistrar、传输 IO
  • Connect 线程:出站连接建立(避免阻塞 GUI)
  • Session IO 线程:SessionIoPump 入站/出站队列处理
  • Capture 线程:Host 端屏幕采集循环
  • Cursor 线程:Host 端光标更新
  • Encode 线程:VideoEncodeWorker H.264 编码
  • Decode 线程:VideoDecodeWorker H.264 解码

5.6 相关文档

  • docs/INDUSTRIAL.md — 工业部署详细说明
  • docs/REFERENCE_ANALYSIS.md — 参考项目分析
  • docs/coturn.example.conf — coturn 配置示例
  • scripts/deploy/README.txt — 部署快速指南
  • README.md — 项目简要说明