1. 新增自编码与全托管模式的解码耗时探针(VideoSink),统计帧率与解码耗时。 2. 修复 SPS 与 PPS 作为独立 CONFIG 单元发送时被误丢弃导致 H.264 永久黑屏的问题。 3. 优化分片重组缓冲,丢弃过期单元并限制缓冲堆积以防内存泄漏。
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(设置面板 + 控制面板)
运行
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 凭据。