远程软件
问题:阶段 1 的 SurfaceView 用 MATCH_PARENT,2560x1440 的视频被拉进 1080x2400 竖屏,画面变形。变形状态下手指位置与远端指针不再一一对应, 触摸映射无从谈起。所以两者必须一起做。 新增 RemoteSurfaceView - onMeasure 按视频宽高比 letterbox:视图尺寸 = 画面尺寸,黑边不属于视图, 触摸天然只在画面内产生事件,坐标归一化到 0..=65535 才准确 - 手势:单指轻点=左键、单指拖动=左键拖拽、双指轻点=右键、双指滑动=滚轮 - 刻意不做「手指即光标」的绝对跟随:手指会完全挡住目标,精细操作不可用 - 边界处理:进入拖拽后落下第二指,先抬起左键再切双指手势, 否则远端会留下一个被按住未释放的按键 协议侧(不改线格式,只加只读查询) - viewer-core::Session 记录 AuthOk 的桌面尺寸,新增 desktop_size() - android-ffi 新增 nativeDesktopSize(handle) -> i64(高32=宽,低32=高) - RustBridge.desktopSize() 拆包 - 尺寸必须在建解码器之前拿到:等首帧再改视图尺寸会触发重新测量, 把刚创建的解码器 surface 打掉 MainActivity - 接入 RemoteSurfaceView.Listener;连接成功后先取尺寸设宽高比,再起解码线程 - 返回键 = 断开(不退出 App,便于重连);去掉阶段 1 的双击断开 (双击现在语义上是「两次左键点击」,会和远端交互冲突) 验证:cargo build --workspace 通过;cargo test 全绿(common 20 + viewer-core 3)。 真机手势验收待手机重新连接后补。 |
||
|---|---|---|
| .cargo | ||
| agent | ||
| agent-core | ||
| android-ffi | ||
| apps/android-viewer | ||
| common | ||
| linux-agent | ||
| scripts | ||
| tools | ||
| vendor/nvenc | ||
| viewer | ||
| viewer-core | ||
| .gitattributes | ||
| .gitignore | ||
| B侧设计文档.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| Git协作规范.md | ||
| README.md | ||
| 借鉴映射与落地规范.md | ||
| 多平台架构设计.md | ||
| 打洞与信令设计.md | ||
| 打洞验证记录.md | ||
| 构建运行手册.md | ||
mvp-remote
自研远程桌面控制软件(办公场景),技术路线参考网易 UU 远程逆向分析结论。
架构
| Crate | 角色 | 说明 |
|---|---|---|
common |
协议库 | 控制消息 / 视频帧线格式,三端共享契约 |
agent |
被控端 | DXGI 屏幕采集 + openh264(H.264) 编码 + QUIC 服务 + SendInput 键鼠注入 |
viewer |
主控端 | QUIC 客户端 + openh264 解码 + minifb 渲染 + 键鼠采集 + 延迟 HUD |
构建
cargo build --release
产物:target/release/agent.exe(被控端)、viewer.exe(主控端),需附带 3 个 mingw 运行库 DLL(libstdc++-6 / libgcc_s_seh-1 / libwinpthread-1)。
运行
# 被控机
agent.exe --port 47800 --code 123456
# 主控机
viewer.exe --addr <被控机IP> --port 47800 --code 123456
详见《构建运行手册.md》、《Git协作规范.md》与《打洞与信令设计.md》。