摘要
战斗记录 App 在玩家玩游戏时不断截取画面,但不能每一帧都送去识别(一次完整读取要一两秒)。它先用关键帧服务挑出“值得读”的画面,再按场景和预算决定送不送读。问题是:很多有价值的画面只出现很短的时间——点开一个生物面板看一眼,可能只停留 0.5–1 秒;鼠标悬停时的攻击预览也一闪而过。
外部审阅会话转来用户的任务:检查并优化战前准备、布阵及战斗开局的信息采集机制。本实验先做真值时间线,再审计现状,然后逐步改动并用端到端回放验证。
要回答的问题
在一局真实对战中,每一段有价值的画面(生物面板、英雄面板、法术书、日志、攻击预览、结算页等)有没有被 App 真正读到?如果没有,是“根本没采集”还是“采到了但没送读”?
数据与来源
- 只用用户选定的训练录像:10 月 10 日 16:57 训练局(前 23 分钟),后来加上 10 月 10 日 01:39 训练局和 10 月 9 日 08:38 官方 AI 训练局做独立检查。没有使用冻结或留出数据。
- 真值时间线(并行助手完成,模型目视核对 MODEL_VISUAL_CHECKED,不是人工审核):每 0.5 秒抽一帧,布阵和战斗段每一帧都看过。16:57 局共 148 段:
| 类型 | 段数 | 其中只出现 1–2 帧 |
|---|---|---|
| 战斗中生物面板 | 24 | 18 |
| 战斗中法术书 | 22 | — |
| 日志 | 9 | — |
| 英雄面板(布阵 2 + 战斗 2) | 4 | — |
| 布阵生物面板 | 2 | — |
| 攻击预览 | 55 | — |
01:39 局另做 246 段真值(战斗生物面板 65 段,其中 29 段 ≤2 帧;法术书 49;日志 12;英雄面板 4;攻击预览 99;结算 1)。
全部测试都是 App 离线视频回放(与菜单“离线视频”同一入口),没有操作用户的游戏或 App。
方法
一、现状审计(改动前)
App 的采集链路:关键帧服务对每一帧用学习型选帧器决定关键帧,再用“阶段门”(phase gate)给出场景;App 按场景决定是否送读,每种场景有固定间隔,与上次读过的画面相比变化格子少于 10% 算重复;会话读取预算 58 次。另有行动条、攻击预览等“旁路读取”(不占会话预算的独立读取通道)。
| 阶段 | 机制 | 审计发现 |
|---|---|---|
| 选秀 | 全部判为跳过 | 按设计不读;“全部确定”页 1/1 读到 |
| 布阵 | 英雄面板间隔 120 秒 | 12 个英雄面板关键帧只读了 2 个,漏掉宝物套装和技能的悬停说明 |
| 开战 | 新场景第一帧不受间隔限制 | 开战后立即读,没有 40 秒盲区 |
| 战斗中法术书 | 间隔 45 秒 | 42 个关键帧只读了 7 个,漏掉变化后的魔法消耗 |
| 战斗中生物面板、日志 | 间隔 0 | 被会话预算挤掉;短面板常常根本没有关键帧 |
| 结算画面 | 判为菜单跳过 | 没读 |
用户担心的“40 秒间隔”只用于普通战场画面;真正的盲区来自英雄面板 120 秒、法术书 45 秒的间隔和会话预算。
二、改动(都在既有机制上扩展)
- 英雄面板、法术书的间隔改为 0,仍保留重复判断。
- 信息页如果因预算、预留或队列挤出读不了,改走旁路读取,结果作为额外帧进入状态估计(SE)。排队顺序:行动条 → 预览 → 信息页 → 普通关键帧。
- 重复判断按“一次打开”计:同一页关掉再打开,就重新读一次。
- 关键帧服务每 0.5 秒对 App 标记的帧跑一次阶段门,给出场景线索(2 Hz,每帧约 16 毫秒),补上选帧器没决定的短面板。
- 法术书和日志要等画面静止(前后两个线索样本是同一页且画面重复)才读;整次打开都没静止,就在关闭时读一个样本。生物面板和英雄面板仍立刻读(很多只出现 1–2 个样本)。
- SE 请求的帧数上限从 256 放宽到 1024。
设置
严格计数:区间内(前后各留 0.5 秒)有一次读取,且路由器在那次读取里真的定位到了该页面,才算读到。各次回放(e2e-11 到 e2e-20)对应依次加入的改动。
结果
16:57 局,改动逐步加入(严格计数):
| 画面(区间数) | 改动前 | +间隔 0 和信息页旁路 | +每次打开读一次和场景线索 |
|---|---|---|---|
| 布阵英雄面板(2) | 1 | 2 | 2 |
| 战斗生物面板(24) | 8 | 12 | 22 |
| 战斗英雄面板(2) | 1 | 2 | 2 |
| 日志(9) | 7 | 9 | 9 |
| 法术书(22) | 7 | 13 | 22 |
| 攻击预览(55) | 40 | 40 | 39 |
| 结算(1) | 0 | 0 | 0 |
但代价很大:旁路信息页读取从 16 次增到 102 次,其中 23 次只读到战场(法术书开合动画、翻页、面板淡入淡出),回放墙钟 921 → 1971 秒。
加入“等静止”(改动 5)后:旁路信息页读取 102 → 47,其中只读到战场的 23 → 3;回放墙钟 1971 → 1445 秒;法术书 22 → 21(一个回归:书关了半秒又打开,被当成上一次打开的重复;已修,下一次回放回到 22/22)。
离线模拟在 01:39 真值上独立检验“等静止”规则:
| 规则 | 信息页读取 | 生物面板 | 法术书 | 日志 |
|---|---|---|---|---|
| 线索即读 | 423 | 65/65 | 49/49 | 12/12 |
| 全部等静止 | 223 | 62/65 | 49/49 | 12/12 |
| 只有法术书和日志等静止(采用) | 264 | 65/65 | 49/49 | 12/12 |
与 16:57 结论一致:法术书和日志等静止不丢区间、省约四成读取;生物面板等静止会丢面板。
后续回放(16:57 局):
| 严格计数 | e2e-17(2 Hz) | e2e-18(4 Hz 线索) | e2e-20(+读最静止的样本) |
|---|---|---|---|
| 战斗生物面板 | 23/24 | 24/24 | 24/24 |
| 法术书 | 22/22 | 20/22 | 22/22 |
| 日志 / 英雄面板 / 布阵 / 开战 / 结算 | 全部 | 全部 | 全部 |
| 攻击预览 | 51/55 | 51/55 | 51/55 |
e2e-20 是这一局所有真值页面类型第一次全部读到。结算页读取接入后,两局真实结算读数共 56/56 个数字与参考一致。
08:38 官方 AI 局(阈值独立于前两局):战斗生物面板 15/15、日志 35/35、法术书 17/17、结算 1/1、攻击预览 26/31。
延迟:e2e-17 加上读取开销修复后,行动条/预览/信息页的排队等待 p95 约为 2.4–2.8 秒,比之前约减半;但两次回放机器负载不同,只算指示性对比。
失败与负结果
- 4 Hz 线索后法术书退步(22 → 20)。最初以为是两个动画样本隔太近被当成静止,于是加了“至少隔 0.45 秒”的条件——无效(e2e-19 结果完全相同)。逐个看日志才发现真正原因:这两次打开一直没满足静止,关闭时读的是最后一个样本,4 Hz 时那个样本已经是关书动画。撤回静止间隔,改读“最静止的样本”后恢复 22/22。原因判断错误的这一轮照实记录。
- 08:38 局的 SE 整局失效:开战前 3 次主读取被 App 整页拒绝,因为一个不在竞技场目录里的子技能身份让整页作废,我方英雄与阵营也随之丢失,减员时间线整局为空、结算 14 张卡全部无法对应。修复后(准备页、阵营颜色、离开行动条三项)再回放:我方阵营定出,结算 12 张对应、2 张因两堆开局数量相同分不开。
- 回放工具在 cp1252 控制台上打印进度时抛异常,结束后不写结果也不退出,20 个进程占约 6 GB,直到手动结束;已修。
- 一次回放开跑 30 秒就在视频解码报异常,单独读同一视频正常,原因未定,保留为未关闭故障。
- 01:39 局里攻击预览线索的最高分常落在一个固定位置(雪地里的敌方狮鹫),会盖住同帧的真预览;两局都只有约 72% 的预览被及时读到,因为规则要求连续两个采样过阈值,而很多预览只出现 1–2 个采样。
- 只显示 0.3–0.5 秒的生物面板,2 Hz 线索可能只采到淡入淡出帧(e2e-13 漏 2/24)。
局限
- 真值是模型目视核对,0.5 秒网格,短于 0.5 秒的面板可能漏标。
- 01:39 局参与过线索阈值和策略的选择,在它上面的结果只算跨录像开发回归。
- 离线回放会等旁路读完;实时模式(真正玩游戏时)的收益和延迟都还没测,部分回放还与其他任务并行,延迟数据不干净。
- 已决定但未送读的画面只在内存里,App 中途退出会丢;旁路读取的原图读完就删,回看时打不开。
结论与下一步
采集盲区主要不是“画面太快”,而是固定间隔和预算这些人为规则;把信息页移到旁路、按“一次打开”去重、加场景线索和等静止规则后,16:57 训练局的页面类型全部读到,且读取量可控。外部审阅建议把指标分三层:采到页面 → 字段读对 → SE 正确消费;下一步是在空闲机器上测延迟、在实时模式下验证(需用户同意),并改进攻击预览线索(给多个峰、把读不出预览的位置记为景物、首次出现一个采样就读并允许重读一次)。
Comments