Files
VibeCoding/webrtc_controller_ios/README.md

58 lines
3.4 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.
# web_rtc_controller_ios
iOS 版 WebRTC 远程控制端,功能对齐 Android 端 `WebRTCController`,配合 `WebRTCSignalServer` 信令服务器与被控端 `WebRTCControlled` 使用。
## 环境要求
- Xcode 15 及以上
- iOS 15.0 及以上iPhone / iPad
- 依赖通过 Swift Package Manager 自动拉取:[stasel/WebRTC](https://github.com/stasel/WebRTC)Google WebRTC 官方二进制封装)
## 架构UIKit 与 SwiftUI 混用
| 层 | 技术 | 说明 |
| --- | --- | --- |
| 应用生命周期 | UIKit (`AppDelegate` / `SceneDelegate`) | `UIHostingController` 承载 SwiftUI 根视图 |
| 界面 | SwiftUI (`ContentView` / `AuthSheetView`) | 连接设置页、鉴权弹窗、控制面板、统计信息 |
| 视频渲染WebRTC 模式) | UIKit (`RTCMTLVideoView`) | 经 `UIViewRepresentable` 嵌入 SwiftUI |
| 视频渲染(自编码模式) | UIKit (`AVSampleBufferDisplayLayer`) | H.264 裸流 VideoToolbox 硬解直显 |
| 触控捕获 | UIKit (`RemoteTouchView`) | 原始触摸事件实时转发,保证"跟手" |
| 状态管理 | Combine (`ControllerViewModel`) | `ObservableObject` 驱动 SwiftUI |
## 目录结构
```
web_rtc_controller_ios/
├── App/ # UIKit 生命周期入口
├── Signaling/ # 信令SignalMessage(JSON) + WebSocket 客户端
├── Control/ # ControlMessage与 control_message.proto 二进制兼容的手写 protobuf 编解码
├── WebRTC/ # WebRTCClientPeerConnection/DataChannel+ SelfCodecDecoder自编码 H.264 解码)
├── Views/ # SwiftUI 页面 + UIKit 渲染/触控视图UIViewRepresentable 桥接)
├── ViewModel/ # ControllerViewModel
└── Utils/ # 设备 ID 等工具
```
## 与 Android 端保持一致的协议
- **信令**WebSocket + JSON`REGISTER` / `OFFER`(携带 `authType`/`authValue`) / `ANSWER` / `ICE_CANDIDATE` / `TARGET_OFFLINE` / `CONNECTION_REJECTED` / `REQUEST_ERROR` / `REQUEST_TIMEOUT`
- **控制通道** `control_channel`可靠有序protobuf `ControlMessage`MOTION_EVENT / SWIPE / KEY / SET_RESOLUTION / SET_STREAM_MODE 及被控端上报)
- **自编码视频通道** `video_channel`(不可靠低延迟):`0xAB` 魔数分片协议(大端序),单元内为 H.264 Annex-B 裸流CONFIG=SPS/PPSFRAME=视频帧)
- **ICE**`stun:stun.l.google.com:19302``stun:www.ttstd.com:3478``turn:www.ttstd.com:3478`
## 功能
- 连接信令服务器并注册(设备 ID 格式 `CTRL-XXXXXXXX`,本地持久化)
- 三种鉴权方式:免密连接 / 动态验证码 / 固定密码
- 远程屏幕实时观看 + 触控(跟手的原始 MotionEvent 转发 + 滑动补发 SWIPE
- 导航键:返回 / 主页 / 多任务Android keyCode 4 / 3 / 187
- 分辨率切换:原始画质 / 1080P / 720P / 480P
- 串流模式切换WebRTCSRTP 视频轨)/ 自编码DataChannel H.264 裸流 + VideoToolbox 硬解)
- 实时统计分辨率、帧率、码率、RTT、链路类型P2P/TURN、编解码器等
## 运行
1. 用 Xcode 打开 `web_rtc_controller_ios.xcodeproj`,首次打开等待 SPM 解析 WebRTC 依赖。
2. 在 Signing & Capabilities 中选择自己的开发团队。
3. 真机运行(模拟器无法验证硬解与摄像头相关能力,控制功能可用)。
4. 输入信令服务器地址(默认 `wss://www.ttstd.com/signal`)与被控端设备 ID选择鉴权方式后连接。