# webrtc-rd **Repository Path**: xusun000/webrtc-rd ## Basic Information - **Project Name**: webrtc-rd - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-24 - **Last Updated**: 2026-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 跨平台远程桌面系统 基于 Flutter + C++ FFI + WebRTC + Go 的跨平台远程桌面解决方案。 ## 系统架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 控制端 (Controller) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ Flutter UI │───▶│ WebRTC SDK │───▶│ 视频渲染/输入捕获 │ │ │ │ (全平台支持) │ │(flutter_webrtc)│ │ (Pointer/Key事件)│ │ │ └──────────────┘ └──────────────┘ └──────────────────┘ │ └───────────────────────────────┬─────────────────────────────────┘ │ │ WebSocket 信令 + WebRTC P2P │ ┌───────────────────────────────┴─────────────────────────────────┐ │ 信令/打洞服务器 (Go) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ WebSocket │ │ SDP/ICE中转 │ │ TURN中继服务 │ │ │ │ 连接管理 │ │ (P2P握手) │ │ (打洞失败fallback)│ │ │ └──────────────┘ └──────────────┘ └──────────────────┘ │ └───────────────────────────────┬─────────────────────────────────┘ │ │ WebRTC P2P DataChannel + SRTP │ ┌───────────────────────────────┴─────────────────────────────────┐ │ 被控端 (Controlled) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ Flutter UI │───▶│ C++ 核心层 │───▶│ 屏幕采集/编码 │ │ │ │ (除iOS外) │ │ (dart:ffi) │ │ (GPU硬件加速) │ │ │ └──────────────┘ └──────────────┘ └──────────────────┘ │ │ │ 键鼠注入(Win/Mac/Linux) │ └─────────────────────────────────────────────────────────────────┘ ``` ## 项目结构 ``` . ├── flutter_remote_desktop/ # Flutter 跨平台客户端 │ ├── lib/ │ │ ├── main.dart # 应用入口 │ │ ├── models/ # 数据模型 (freezed) │ │ ├── screens/ # 页面 │ │ │ ├── home_screen.dart # 首页(模式选择) │ │ │ ├── controller_screen.dart # 控制端 │ │ │ └── controlled_screen.dart # 被控端 │ │ ├── services/ # 服务层 │ │ │ ├── signaling_service.dart # WebSocket信令 │ │ │ └── webrtc_service.dart # WebRTC连接 │ │ ├── providers/ # Riverpod状态管理 │ │ ├── core/ # 核心桥接 │ │ │ ├── ffi/ # C++ FFI接口 │ │ │ └── platform/ # 平台通道 │ │ └── utils/ # 工具类 │ ├── native/ # C++ 原生核心 │ │ ├── include/ # 头文件 │ │ ├── src/ # 源文件 │ │ │ └── platform/ # 平台特定实现 │ │ │ ├── windows/ # DXGI + SendInput │ │ │ ├── macos/ # ScreenCaptureKit + CGEvent │ │ │ └── linux/ # X11 + XTest │ │ └── CMakeLists.txt # CMake构建 │ ├── android/ # Android配置 │ ├── ios/ # iOS配置 │ ├── windows/ # Windows配置 │ ├── macos/ # macOS配置 │ └── linux/ # Linux配置 │ └── signal_server/ # Go 信令/打洞服务器 ├── cmd/server/ # 主程序入口 ├── internal/ │ ├── config/ # 配置管理 │ ├── signaling/ # WebSocket信令Hub │ └── relay/ # TURN中继服务 ├── config.yaml # 配置文件 └── go.mod # Go模块 ``` ## 技术栈 | 模块 | 技术选型 | 说明 | |------|---------|------| | **控制端UI** | Flutter | 全平台界面,视频渲染 | | **被控端核心** | C++ + FFI | 屏幕采集、硬件编码、键鼠注入 | | **P2P传输** | WebRTC | 音视频流、DataChannel控制指令 | | **信令服务** | Go + WebSocket | 设备注册、SDP/ICE中转 | | **打洞失败** | TURN | Coturn/pion-turn 流量中继 | ## 支持平台 | 平台 | 控制端 | 被控端 | |------|--------|--------| | Android | ✅ | ⚠️ (需Root/辅助服务) | | iOS | ✅ | ❌ (系统限制) | | Windows | ✅ | ✅ (DXGI + SendInput) | | macOS | ✅ | ✅ (ScreenCaptureKit + CGEvent) | | Linux | ✅ | ✅ (X11 + XTest) | ## 快速开始 ### 1. 启动信令服务器 ```bash cd signal_server go mod tidy go run cmd/server/main.go # 或编译运行 # go build -o signal-server cmd/server/main.go # ./signal-server ``` 服务器默认监听 `:8080`,TURN服务监听 `:3478`。 ### 2. 运行 Flutter 客户端 ```bash cd flutter_remote_desktop # 安装依赖 flutter pub get # 生成freezed代码 flutter pub run build_runner build --delete-conflicting-outputs # macOS桌面端 flutter run -d macos # Windows桌面端 flutter run -d windows # Linux桌面端 flutter run -d linux # Android flutter run -d # iOS flutter run -d ``` ### 3. 编译 C++ 原生库(桌面端被控端) ```bash cd flutter_remote_desktop/native mkdir build && cd build cmake .. cmake --build . --config Release # 将生成的库复制到对应位置 # macOS: build/libremote_desktop_core.dylib -> ../macos/Runner/ # Windows: build/Release/remote_desktop_core.dll -> ../windows/runner/ # Linux: build/libremote_desktop_core.so -> ../linux/bundle/lib/ ``` ## 核心功能 - [x] WebRTC P2P音视频传输 - [x] WebSocket 信令服务 (Go) - [x] 设备注册与认证 (9位代码 + 6位密码) - [x] TURN 中继服务器 - [x] Flutter 全平台UI框架 - [x] C++ FFI 桥接层 - [x] 平台特定实现框架 (Win/Mac/Linux) - [ ] GPU硬件编码 (H.264/H.265) - [ ] 自适应码率 (ABR) - [ ] 剪贴板同步 - [ ] 多显示器切换 ## 配置 编辑 `signal_server/config.yaml`: ```yaml env: development port: 8080 log_level: info jwt_secret: "your-secret-key" turn: enabled: true port: 3478 realm: "remotedesktop.local" username: "user" password: "pass" stun: enabled: true addr: "stun.l.google.com:19302" ``` ## 安全说明 - 媒体流强制使用 **WebRTC SRTP** 端到端加密 - 信令通道使用 **WSS (WebSocket over TLS)** - 设备认证采用 **9位随机代码 + 6位动态密码** - TURN 凭据由服务器动态生成 ## 性能目标 | 指标 | 目标 | |------|------| | 局域网延迟 | ≤ 30ms | | 广域网延迟 | ≤ 80ms | | 默认画质 | 1080P 60FPS | | 被控端CPU (后台) | ≤ 2% | | 被控端内存 (后台) | ≤ 100MB | | 串流时CPU | ≤ 10% (GPU编码) | ## 协议消息格式 ```json { "type": "register|offer|answer|ice|control|heartbeat|auth", "from": "device_id", "to": "target_device_id", "deviceCode": "123456789", "password": "123456", "payload": {}, "timestamp": 1716547200000 } ``` ## License MIT