Files
VibeCoding/webrtc_controller_flutter/README.md

67 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` | WebRTCAndroid + 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_CANDIDATEpayload 为 JSON 字符串)。
- **被控端**:使用 WebRTCControlledAndroid接收 OFFER 并回传 ANSWER
`InputCommandHandler` 解析 TOUCH / SWIPE / KEY 指令。
- **ICE 服务器**:见 `lib/config/ice_servers.dart`,请按需替换为自己的 TURN 凭据。