build: 控制端功能移植到flutter版本
This commit is contained in:
@@ -1,17 +1,66 @@
|
||||
# webrtc_controller_flutter
|
||||
# WebRTC 控制端 (webrtc_controller_flutter)
|
||||
|
||||
A new Flutter project.
|
||||
将原生 Android 项目 **WebRTCController** 的功能移植到 Flutter,使用**跨平台**依赖,可同时运行于 **Android** 与 **iOS**。
|
||||
|
||||
## Getting Started
|
||||
## 功能
|
||||
|
||||
This project is a starting point for a Flutter application.
|
||||
对应原 Android 控制端(WebRTCController)的能力:
|
||||
|
||||
A few resources to get you started if this is your first Flutter project:
|
||||
- 通过 WebSocket 连接信令服务器并注册为 `CONTROLLER` 设备
|
||||
- 创建 WebRTC 连接(仅接收远端视频 `recvonly` + 一条控制用 DataChannel)
|
||||
- 显示被控端画面(远端视频流)
|
||||
- 通过触摸 / 滑动 / 物理按键采集输入,转换为相对坐标(0.0~1.0)经 DataChannel 发送控制指令(TOUCH / SWIPE / KEY)
|
||||
- 实时显示连接统计(分辨率、帧率、延迟、解码格式)
|
||||
|
||||
- [Learn Flutter](https://docs.flutter.dev/get-started/learn-flutter)
|
||||
- [Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
|
||||
- [Flutter learning resources](https://docs.flutter.dev/reference/learning-resources)
|
||||
## 运行依赖(跨平台)
|
||||
|
||||
For help getting started with Flutter development, view the
|
||||
[online documentation](https://docs.flutter.dev/), which offers tutorials,
|
||||
samples, guidance on mobile development, and a full API reference.
|
||||
| 包 | 用途 |
|
||||
| --- | --- |
|
||||
| `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 凭据。
|
||||
|
||||
Reference in New Issue
Block a user