-
released this
2026-09-18 02:47:05 +08:00 | 3 commits to main since this releaseOpenDance Studio -- Windows 客户端 v0.2.5
修复:
config被当成心跳周期性广播(每 2 秒一条);
新增:契约「可选/兜底」语义的定向验收(v0.1.0 风格对端 / 缺deviceId/ 不发hello)。契约快照不变:
rest-api 0.5.0/websocket-keypoints 0.2.0/data-models 0.7.0/
skeleton-topology 0.2.0/model-formats 0.5.0/database 0.4.0
(与 opendance-web / opendance-android 逐字节一致)。一、缺陷:config 被当成心跳
_maybe_push_config()原来每CONFIG_PUSH_INTERVAL_MS(2 秒)无条件广播一次config。
契约 §3.3 的语义是「运行中调整时下发」,不是心跳:- 一次 30 分钟推流 = 900 条没有任何信息量的消息;
- 更糟的是它让「收到 config」无法被当作「配置变了」的信号 —— 发送端想据此做点什么
就无从判断。
修复:抽出
config_payload()作为唯一载荷与指纹来源;hello应答顺序固定为
先welcome、再config(若靠周期 tick 补发,新对端第一条消息可能变成config,
只认握手应答的实现会困惑);之后仅当载荷真的变化才广播,并用同一常量做去抖
(连续拖动滑块不会每个中间值都发一条);显式broadcast_config()(UI 改设置)也同步
更新指纹,避免下一 tick 重发。实测:17 秒内 config 9 条 → 1 条。
二、新增:契约「可选/兜底」语义的定向验收
上一轮 Android 侧的教训是「契约里可选的字段必须用不提供它的对端来测,
否则等于没测」(自家两端总是互相迎合)。本版把它用到接收端:场景 契约 断言 v0.1.0 风格对端:只发二进制帧(每 500 ms 一帧)、从不发 ping/stats、hello不带deviceId,持续 17 秒(> 静默超时 15 秒)§1.1 明确「仅实现 v0.1.0 的一端仍可正常互通(它不发 ping,但每帧已足够保活)」 连接保持打开;服务端没有把它静默超时踢掉 两条都不带 deviceId的连接同时在线§5「 deviceId缺失或为空 → 不做去重,按连接计数」两条都保持打开; device_replaced只应有那次真正重复deviceId的事件完全不发 hello、只发 5 帧的对端契约未规定(不该崩、不该断) 不断开、不崩、帧仍计入 WebSocket 验收断言:30 → 40 项,40 通过 / 0 失败。
三、顺带修掉验收脚本自身两处误判
- 把「跨连接的
frame_id回退」当缺陷:frame_id是每条连接各自从 0 递增,
新连接重新从 0 开始完全合规 —— 指标用错了。已改名并标注「仅参考」;
真正相关的判据是逐连接的frames_dropped == 3。 - 把「静默超时次数」当固定值:套件里本来就有"完全不发数据"的对端,空闲的连接也会
被正常超时。已改为定向断言:由hello记录建立client_id → device映射
(探针新增hellos[]),只检查 v0.1.0 风格对端没被误踢。
测试客户端也改为顺序无关(
nextOfType(type))—— 契约没规定消息顺序,
"第一条消息就是 welcome" 的假设在welcome后紧跟config时立刻暴露。四、附件与解压(重要)
资产 说明 opendance-windows-v0.2.5.zip单个完整包,不分卷: OpenDance.exe+OpenDance.pck(必须同目录)+THIRD_PARTY.md+README.txt+README.md+contracts/SHA256SUMS裸文件名, sha256sum -c SHA256SUMS直接校验解压需要 7-Zip / WinRAR / PeaZip:本包用 LZMA 压缩(26,634,144 B)以绕过本站
前置 IIS 的maxAllowedContentLength = 30,000,000字节上限
(同内容 deflate 包约 38 MB,会 HTTP 413)。Windows 10 资源管理器不支持
LZMA(method 14) 的 zip,双击会报错。五、发布前自检(本版实测,四条全绿)
$ bash build/accept-release.sh <zip> ✓ PE 版本资源 0.2.5 / pck 启动 180 帧无错 / pck 无开发残留 / 运行时探针全过 $ bash build/accept-ws.sh <zip> == 结果:40 通过 / 0 失败 ==(客户端)+ 服务端侧全部事实 $ bash build/accept-frame-vectors.sh <zip> ✓ 解码 12/12、396 点 0 差异 / ✓ 编码器字节与参考实现完全一致(0 项差异) $ bash build/verify.sh == 结果:785 通过 / 0 失败,6 跳过 ==六、未在本环境验证(诚实声明)
- 本仓库在 Linux 上导出 Windows 产物,没有 Windows 机器与真机 30 分钟联调;
- 跨端集成验收(
accept-integration.sh)需要已部署的 Web 服务端。
Downloads