|
186 | 186 | | ColumnResizer(2.4) | 补 `tabIndex=0` + role=separator:←/→ 步进 ±16px(Shift ±8px)夹取 min/max;双击复位+轻提示;pointer 拖拽增量语义(§2.4) | |
187 | 187 | | 列表键盘导航 | **观察项不做**(checkbox 模式退场后重评估整列键盘导航;Tab 可达性仍靠批量按钮/搜索/右键菜单入口)——边界如实标注 | |
188 | 188 |
|
| 189 | +### 2.10 视频暂停随播随停:声画双通道即时检测(REQ-291,2026-09-05 用户追加) |
| 190 | + |
| 191 | +**目标**:用户暂停视频时采集同步暂停(画面链冻结+时间轴扣除暂停段+末帧保留,沿用 P2 自动暂停语义),恢复随即跟上——"即停即知≈1s / 恢复≤0.5s"。同时作 REQ-281 watchdog 的互斥门(真暂停不误报停更),并替代 player_behavior 5s OCR 判定成为主通道。 |
| 192 | + |
| 193 | +**信号(全部现成零新采集成本)**: |
| 194 | +- 音频:系统环回 200ms/块 RMS(audio_loopback 现成)→ 新增共享槽 `audio_active`(阈值 MEDIA_AUDIO_ACTIVE_RMS,区别于 VAD 的语音阈值——"有任何声音"而非"有人说话"); |
| 195 | +- 画面:屏幕 worker 现有网格 diff 计数(stats.diff_pass 每 ~1s 增长=画面在动)。 |
| 196 | + |
| 197 | +**判定(media_state.rs 纯状态机,输入=audio_active/画面动/时间)**: |
| 198 | +``` |
| 199 | +playing ──音频连续静默 ≥3 块(≈0.6s)──▶ suspect_paused |
| 200 | +suspect ──下一画面 tick(≤1s)无变化──▶ paused(确认)→ 触发既有自动暂停机制 |
| 201 | +suspect ──画面仍动(静音无音轨视频)──▶ playing(撤销,不真冻结) |
| 202 | +paused ──声或画任一恢复──▶ playing(≤0.5s 恢复) |
| 203 | +``` |
| 204 | +滞回:缓冲转圈/进度条动画等短暂画面活动不打断 suspect→paused(等待期≈1 tick);进入 playing 需稳定 ≥2 tick。 |
| 205 | + |
| 206 | +**接线与输出**: |
| 207 | +1. `audio_loopback` 每块更新 audio_active;screen worker 侧喂画面信号(liveness 采样点已有 got_frame/diff); |
| 208 | +2. `live:media-paused/resumed` 事件 + 课堂页「⏸ 已随视频暂停」徽标(与手动暂停区分); |
| 209 | +3. 暂停触发沿用 P2 SessionPause 机制(live:paused 语义不变,时间轴扣除暂停段——用户裁决"扣除");player_behavior OCR 判定降级为辅助/移除; |
| 210 | +4. watchdog(§2.1)仅在非 paused 态评估(互斥门——静态讲解画面不误报停更); |
| 211 | +5. 阈值真机标定(MEDIA_AUDIO_ACTIVE_RMS/滞回)一次 A/B 自验证。 |
| 212 | + |
| 213 | +**文件**:新 `media_state.rs`(纯函数+单测)· `audio_loopback.rs`(槽更新)· `live_session_frame.rs`/worker(喂信号+暂停/恢复动作)· `live_session.rs`(共享槽装配)· 事件类型与 `ClassroomPage.tsx`(徽标)· 既有自动暂停路径审计(去重冲突)。 |
| 214 | +**验收**:状态机单测(含静音无音轨撤销/缓冲滞回/恢复边沿);真机=抖音播放→暂停→恢复三拍,采集冻结/恢复时间记录。 |
| 215 | + |
189 | 216 | ## 3. 版本切分建议(v0.19 线,随实施进度微调) |
190 | 217 |
|
191 | 218 | | 版本 | 内容 | 依赖 | |
192 | 219 | |---|---|---| |
193 | 220 | | v0.19.6 | 2.1 帧心跳→watchdog+提示 / 2.4 拖拽修复 / 2.2A 标题零 AI 层 / 2.8 埋点先行 | 无 | |
194 | | -| v0.19.7 | 2.3 开关入弹层 / 2.5 挂体系轻建 / 2.6 列表交互重构 / 2.8 片内流式+输出预算化 | 2.8 埋点基线(v0.19.6 已取) | |
| 221 | +| v0.19.7 | 2.3 开关入弹层 / 2.5 挂体系轻建 / 2.6 列表交互重构 / 2.8 片内流式+输出预算化 / 2.10 随播随停(REQ-291) | 2.8 埋点基线(v0.19.6 已取) | |
195 | 222 | | v0.19.8 | 2.2B AI 建议标题 / 2.7 D1+D2 | kb 引擎真机就绪(v0.19.5 待办);2.6 手动排序命令 | |
196 | 223 | | (另线) | 目标执行智能体系列 | [另文档](./2026-09-05-goal-execution-agent-design.md) §排期 | |
197 | 224 |
|
|
209 | 236 | | REQ-288 | 体系 D1 证据反推生长建议(聚类建议制) | P2 | v0.19.8 | |
210 | 237 | | REQ-289 | 体系 D2 节点缺口仪表与加入目标 | P2 | v0.19.8 | |
211 | 238 | | REQ-290 | AI 精修片内流式 + 档位输出预算化 + 链路埋点 | P1 | v0.19.6/7 随 2.8 分批 | |
| 239 | +| REQ-291 | 视频暂停随播随停(声画双通道即时检测,2026-09-05 用户追加裁决) | P1 | v0.19.7 | |
212 | 240 |
|
213 | 241 | ## 5. 红线与公共约束 |
214 | 242 |
|
|
0 commit comments