Files
opendance-android/tasks/005-websocket-client.md
T
zijunchiang 264786134c docs: 新增「初次部署(从零跑起来)」;去混淆字符与真实内网信息
- README.md / README.txt 新增初次部署章节:前置条件(JDK 17 / SDK 34 / Gradle 8.9)、
  获取代码与本地配置(local.properties 不入仓)、Debug/Release 构建、装到手机与相机权限、
  连接配置(只连 Windows 客户端,默认 8765 / /pose)、第一次跑通、自检清单、常见问题
- 单测数量按实际(30 项)修正
- 三库同源契约:':=' 写法修回、去掉真实 MariaDB 版本串
- 全文去除易被 Gitea 判为「模棱两可 Unicode」的字符
- 本机 JDK 路径与内网示例地址改占位符 / RFC 5737 文档网段
2026-09-15 21:33:27 +08:00

1.7 KiB
Raw Blame History

T-AND-005 WebSocket 推流 + 自动重连

  • 状态:done
  • 依赖:T-AND-004

目标

把 239 字节帧与控制消息推给 Windows 客户端,网络抖动时自动恢复。

load

DSH.md
contracts/websocket-keypoints.md   # 锚点:1 端点与子协议、3 控制帧
app/src/main/java/com/opendance/studio/net/PoseWebSocketClient.kt

交付物

net/PoseWebSocketClient.kt:OkHttp WebSocket 封装 + 状态流 + 统计。

关键实现

项 做法 理由
子协议 请求头 Sec-WebSocket-Protocol: opendance.pose.v1 契约 1
二进制帧 socket.send(ByteString) 契约要求生产链路用二进制
控制帧 send(text),JSON hello / stats / bye
自动重连 指数退避 1s -> 2s -> 4s... 上限 15s,连接成功即重置 避免抖动时打爆对端
非连接态发送 直接丢弃并计入 droppedFrames 绝不阻塞相机线程
心跳 OkHttp pingInterval(15s) 及时发现半开连接
读超时 0(不超时) WebSocket 长连接
统计 发送帧数、丢弃帧数、发送 FPS、RTT、重连次数、最近错误 运行页状态指示

控制帧

  • hello(连接后立即发):protocol / device / appVersion / cameraFacing / targetFps / resolution
  • welcome(收):记录服务端 sessionId
  • config(收):服务端可下发 mirror / targetFps / upperBodyOnly / resolution, 通过 onRemoteConfig 回调
  • stats(每秒发):fps / dropped / latencyMs / confidenceAvg
  • bye(主动断开时发)

验收

assembleDebug 通过;状态机与统计逻辑由运行页展示(需真机验证端到端)。