# 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 凭据。
