# WebRTC 控制端 (webrtc_controller_flutter) 将原生 Android 项目 **WebRTCController** 的功能移植到 Flutter,使用**跨平台**依赖,可同时运行于 **Android** 与 **iOS**。 ## 功能 对应原 Android 控制端(WebRTCController)的能力: - 通过 WebSocket 连接信令服务器并注册为 `CONTROLLER` 设备 - 创建 WebRTC 连接(仅接收远端视频 `recvonly` + 一条控制用 DataChannel) - 显示被控端画面(远端视频流) - 通过触摸 / 滑动 / 物理按键采集输入,转换为相对坐标(0.0~1.0)经 DataChannel 发送控制指令(TOUCH / SWIPE / KEY) - 实时显示连接统计(分辨率、帧率、延迟、解码格式) ## 运行依赖(跨平台) | 包 | 用途 | | --- | --- | | `flutter_webrtc` | WebRTC(Android + iOS 统一封装) | | `web_socket_channel` | 信令 WebSocket | | `uuid` | 生成本机设备 ID | > 以上包均支持 Android 与 iOS,无需编写任何平台原生代码。 ## 目录结构 ``` lib/ ├── config/ice_servers.dart # ICE/TURN/STUN 配置与默认信令地址 ├── models/signal_message.dart # 信令消息模型 ├── signaling/signaling_client.dart# WebSocket 信令客户端 ├── webrtc/webrtc_controller.dart # WebRTC 连接 / DataChannel / 视频渲染 / 统计 ├── controller/remote_controller.dart # 编排:信令 + WebRTC 流程 ├── utils/control_commands.dart # 控制指令 JSON 构造 ├── widgets/remote_touch_view.dart # 触摸/按键采集(纯 Flutter,跨平台) └── main.dart # UI(设置面板 + 控制面板) ``` ## 运行 ```bash flutter pub get flutter run # 默认运行到已连接设备 flutter run -d android flutter run -d ios # 需 macOS + Xcode ``` ### iOS 注意事项 - 本项目已补齐 `ios/Podfile`(基于当前 Flutter 版本官方模板)。 在 macOS 上首次构建会自动执行 `pod install` 拉取 `flutter_webrtc`。 - 为支持开发环境的 `ws://` 明文信令,`ios/Runner/Info.plist` 已添加 `NSAppTransportSecurity -> NSAllowsArbitraryLoads = true`(生产环境建议改用 `wss://`)。 ### Android 注意事项 - `android/app/src/main/AndroidManifest.xml` 已添加 `INTERNET` 权限与 `android:usesCleartextTraffic="true"`(支持 `ws://`)。 ## 对接说明 - **信令服务器**:需与 WebRTCControlled 项目共用同一套信令协议 (REGISTER / OFFER / ANSWER / ICE_CANDIDATE,payload 为 JSON 字符串)。 - **被控端**:使用 WebRTCControlled(Android)接收 OFFER 并回传 ANSWER, 其 `InputCommandHandler` 解析 TOUCH / SWIPE / KEY 指令。 - **ICE 服务器**:见 `lib/config/ice_servers.dart`,请按需替换为自己的 TURN 凭据。