3.4 KiB
3.4 KiB
MVP 远程控制 Demo · 构建运行手册
项目路径:
D:\wordkb\2026-10-22-15-52-47\mvp-remote\形态:Rust workspace,三个 crate:common(协议)、agent(被控端)、viewer(主控端)
1. 功能范围(量级一 Demo)
- ✅ DXGI Desktop Duplication 全屏采集(GPU 拷贝,脏区/硬编码留待二期)
- ✅ LZ4 压缩 + QUIC 加密传输(自签名证书,传输层已加密)
- ✅ 验证码认证(默认 123456)
- ✅ 键鼠远程控制(SendInput 注入,虚拟桌面绝对坐标 + 扫描码)
- ✅ 桌面静止时低频重发(保持画面新鲜)
- ❌ 暂无:硬件编码、P2P 打洞/中继(当前仅局域网/可直连地址)、音频、文件传输、Linux 被控
2. 环境要求
- Windows 8+(被控端需要 DXGI Duplication;主控端 Win7 亦可)
- 工具链已全部部署在 D 盘(无需再装):
- Rust (GNU):
uurev/tools/rust/cargo/bin - MinGW-w64 14.2:
uurev/tools/mingw64/bin
- Rust (GNU):
3. 构建
export RUSTUP_HOME="D:\\wordkb\\2026-10-22-15-52-47\\uurev\\tools\\rust\\rustup"
export CARGO_HOME="D:\\wordkb\\2026-10-22-15-52-47\\uurev\\tools\\rust\\cargo"
export PATH="/d/wordkb/2026-10-22-15-52-47/uurev/tools/rust/cargo/bin:/d/wordkb/2026-10-22-15-52-47/uurev/tools/mingw64/bin:$PATH"
cd /d/wordkb/2026-10-22-15-52-47/mvp-remote
cargo build --release
产物:
- 被控端
target/release/agent.exe - 主控端
target/release/viewer.exe
4. 运行(两台机器,或同机双开验证)
被控端(要被控制的电脑):
agent.exe --port 47800 --code 888888
主控端(操作的电脑):
viewer.exe --addr <被控端IP> --port 47800 --code 888888
同机自测:被控端 --port 47800,主控端 --addr 127.0.0.1。
操作说明:窗口内直接键鼠操作;Esc 退出。窗口尺寸=被控端分辨率(暂不可缩放)。
5. 代码结构导读(演进锚点)
| 文件 | 职责 | 二期改造点 |
|---|---|---|
common/src/lib.rs |
控制消息/视频帧线格式 | 换 protobuf;加 FEC/序列号 |
agent/src/capture.rs |
DXGI 采集 + LZ4 | 加脏矩形、NVENC/QSV 硬编(替换 LZ4) |
agent/src/input.rs |
SendInput 注入 | 加剪贴板/多显示器虚拟桌面细化 |
viewer/src/main.rs |
minifb 渲染 + 输入采集 | 换 GPU 解码渲染(D3D11/YUV);加自适应码率 |
viewer/src/keymap.rs |
扫描码映射 | 补全 F 区/小键盘/IME 文本通道 |
6. 已知限制(MVP 预期内)
- 带宽:1080p LZ4 裸帧约 20-60MB/s,仅适合局域网。公网可用必须上 H.264 硬编(二期第一个任务)。
- 安顿证书:客户端跳过服务端证书校验(代码内
SkipVerify已标注),存在中间人风险,仅限测试。 - 被控端需在交互会话中运行(RDP 断开后桌面复制会失效——二期做服务化+虚拟桌面处理)。
- 高 DPI/多屏:当前只采集主输出(EnumOutputs(0))。
- 主控端窗口固定为远端分辨率,颜色序 BGRA→0RGB 若异常可在
blit()一键翻转。
7. 下一阶段任务队列(Phase 1 剩余)
- H.264:接 openh264(软编兜底)→ NVENC/QSV(硬编优先)
- 码率自适应 + 关键帧请求(协议已留
KeyFrameReq) - QUIC 多流:视频/控制/键鼠分离流(键鼠零阻塞)
- P2P 打洞 + coturn 中继(自建信令服务器)
- 被控端服务化(Windows Service + 会话切换处理)