refactor(auto-thumbnail): [PKG-AUTO-THUMB-03] own hidden renderers and reject stale seeks

This commit is contained in:
Harvey Zhao committed 2026-09-13 07:23:55 +08:00
1 parent 84721f19ed
commit a128706fe7
23 files changed
+12210 -38

No files matched your search

File diff suppressed because it is too large. Load diff
@@ -0,0 +1,75 @@
{
"kind": "generated-auto-thumbnail-timeline",
"version": "ffmpeg version 2025-11-12-git-6cdd2cbe32-full_build-www.gyan.dev Copyright (c) 2000-2025 the FFmpeg developers",
"args": [
"-hide_banner",
"-loglevel",
"error",
"-n",
"-f",
"lavfi",
"-i",
"color=c=purple:s=320x180:r=30:d=0.033333333",
"-f",
"lavfi",
"-i",
"color=c=red:s=320x180:r=30:d=1.966666667",
"-f",
"lavfi",
"-i",
"color=c=black:s=320x180:r=30:d=2",
"-f",
"lavfi",
"-i",
"color=c=blue:s=320x180:r=30:d=2",
"-f",
"lavfi",
"-i",
"color=c=yellow:s=320x180:r=30:d=2",
"-filter_complex",
"[0:v][1:v][2:v][3:v][4:v]concat=n=5:v=1:a=0[v]",
"-map",
"[v]",
"-c:v",
"libx264",
"-pix_fmt",
"yuv420p",
"-g",
"30",
"-movflags",
"+faststart",
"auto-thumbnail-timeline.mp4"
],
"width": 320,
"height": 180,
"fps": 30,
"duration": 8,
"segments": [
[
"purple",
"0.033333333"
],
[
"red",
"1.966666667"
],
[
"black",
"2"
],
[
"blue",
"2"
],
[
"yellow",
"2"
]
],
"purpose": "Unique purple first frame, then red/black/blue/yellow timeline; distinguish missing transparent pixels, legitimate black frames and stale first frames.",
"file": {
"name": "auto-thumbnail-timeline.mp4",
"bytes": 8602,
"sha256": "10370156cffada462d3ea00aae0caadd62752369cd6538cc55248b3ddd7bf994"
}
}
@@ -0,0 +1,50 @@
# PKG-AUTO-THUMB-03 隐藏解码元素检查点(doing)
新增video.js,独立拥有内部video的挂载、静音、可访问性和移除。使用固定定位、
visibility:hidden及metadata时锁定的原始尺寸;不调用play,不用display:none或1px缩放。
extraction继续拥有原来的起点采样公式和串行编码。普通全局video样式不会把内部解码
元素缩成1px;初始化取消、插入前后同步重入、插入失败及load/pause异常也回收DOM。
公开参数、结果、Promise时序和声明未改。正常构建再生dist和docs副本。
构建main产物的验证又复现一次后续格偏移约1.6秒,失败报告独立保留为
auto-thumbnail03-render-browser-verified-main.json(该文件名虽含verified,结果仍是
14通过/1失败)。因此继续修复seeked归属:仍在seeking时忽略旧事件,绘制前检查有限
currentTime及目标50ms容差;偏离只重试原目标最多3次,再失败清理。新增4项回归覆盖
错时重试、重试界限/旧预览保留、seeking旧事件和时间getter销毁重入。最终证据使用
browser-timing及unit-timing文件,不把这次失败当成通过或靠重复运行覆盖。
新增5项单元边界:此前检查点运行29项为25通过/4失败,新实现29通过。第五项load抛错
本来就能通过,此次加强其DOM所有权断言。不能将29项都称为本次新修复。
真实浏览器新增两种像素样本:时间颜色片段及空间颜色图案。时间片段8秒/30fps,首帧
独立紫色,随后红、黑、蓝、黄;生成脚本、FFmpeg版本、参数、SHA256保存在媒体清单。
重新生成字节完全一致。解码前raw alpha区分“没有画出来”和合法黑画面,实际JPEG解码
验证颜色及空间差异,记录采样时间。9项原生生命周期还增加DOM脱离断言。
**这是局部修复,03和AUTO-THUMB-PIXEL-01保持未完成。** 新的像素验收只覆盖五格中的
第2-4格(从0编号);前两格完整记录为诊断数据,不能当成通过。初次广泛断言的报告
保留在auto-thumbnail03-render-browser-source-initial.json:发现Firefox早期draw可能
透明,Windows WebKit的早期seeked可能时间回退。pattern样本的JPEG中心在色块交界处
存在色度混合,末段本身也改变颜色,因此不能错误地要求每一格中心始终纯蓝。
当前像素断言使用已知阶段的颜色优势和空间差异;这不意味着早期帧问题被修复。
独立诊断还证明:WebKit跳回0秒可能保留上一张图;两次rAF、先跳远再返回、fastSeek及
playing后立即pause均未稳定解决。唯一紫色首帧在Chromium/Firefox的0秒出现,而本机
WebKit可能在约0.04秒才读到;不能简单把所有浏览器偏移0.04秒,也不能用均匀红色片段
掩盖一帧的时间错误。相关原始实验摘要保存在本检查点验证记录,物理Safari仍未验证。
后续继续首帧和早期frame-ready调度,保持任务取消及URL归属,再完成资源预算/其余
边界;04转严格TS,05/06做核心组合、设备、真实安装与demo/editor。没有新依赖、
发布、推送或任务完成数变化。提交仅是可回退的03检查点。
见[验证记录](../baselines/auto-thumbnail-hidden-renderer.json)。
最终33项候选回归:此前检查点25通过/8失败,源码/main/legacy各33通过。最终源码原生
连续三轮45项,main/legacy各15项,共75项通过,无重试/跳过/未处理页面错误。完整CI1799项
(1553单元+14工程+232基线)及339生产TS通过;另核对4种实际bundle入口与无DOM异步
注册,尚不代表安装tarball。三份产物与docs副本逐字节相等,03仍doing,像素风险仍open。
后续实验auto-thumbnail-frame-callback-probe在loadeddata后对每次seek等待原生帧回调,
Chromium/Firefox隐藏和普通元素都能读到五格预期颜色,包括独立紫色首帧;本机WebKit
没有requestVideoFrameCallback。这尚未接入生产,下一步要处理回调归属/取消/失效/
超时及无该API浏览器的可靠路径,不能把实验结果提前标为修复。
+1 -1
View File
@@ -496,7 +496,7 @@
- PKG-AUDIO-05: [记录](changes/2026-09-12-PKG-AUDIO-05-combinations.md) [记录](baselines/audio-combinations-first.json) [记录](baselines/audio-combinations-checkpoint.json) [记录](audio-validation.md)
- PKG-AUTO-THUMB-01: [记录](baselines/auto-thumbnail-release.json) [记录](baselines/auto-thumbnail-contract.md) [记录](changes/2026-09-13-PKG-AUTO-THUMB-01-contract.md) [记录](baselines/auto-thumbnail-contract-validation.json)
- PKG-AUTO-THUMB-02: [记录](baselines/auto-thumbnail-failures.md) [记录](baselines/auto-thumbnail-failures-validation.json) [记录](changes/2026-09-13-PKG-AUTO-THUMB-02-failures.md)
- PKG-AUTO-THUMB-03: [记录](changes/2026-09-13-PKG-AUTO-THUMB-03-lifecycle-checkpoint.md) [记录](baselines/auto-thumbnail-lifecycle-checkpoint.json)
- PKG-AUTO-THUMB-03: [记录](changes/2026-09-13-PKG-AUTO-THUMB-03-lifecycle-checkpoint.md) [记录](baselines/auto-thumbnail-lifecycle-checkpoint.json) [记录](changes/2026-09-13-PKG-AUTO-THUMB-03-hidden-renderer.md) [记录](baselines/auto-thumbnail-hidden-renderer.json) [记录](baselines/auto-thumbnail-timeline-media.json)
- PKG-HLS-01: [记录](baselines/hls-control-contract.md) [记录](baselines/hls-control-release.json) [记录](changes/2026-09-11-PKG-HLS-01-contract.md)
- PKG-HLS-02: [记录](hls-validation.md) [记录](baselines/hls-sdk.json) [记录](baselines/hls-validation.json) [记录](changes/2026-09-11-PKG-HLS-02-tests.md)
- PKG-HLS-03: [记录](changes/2026-09-12-PKG-HLS-03-modules.md) [记录](baselines/hls-modules-validation.json) [记录](hls-validation.md)
+13
View File
@@ -1,5 +1,18 @@
# 进度与证据
## PKG-AUTO-THUMB-03 隐藏解码与错时seek重试检查点(doing)
新增video模块,挂载隐藏且保持实际尺寸的解码元素,完善DOM回收及插入/清理重入。
真实产物测试发现seeked可能停留在前一格,已增加绘制前时间核对及最多3次原目标重试。
33项候选单元在此前检查点25通过/8失败,新源码/main/legacy各33通过。
最终原生源码连续三轮45项、main/legacy各15项通过,共75项;其中仅第2-4格有像素
验收,前两格及首帧精度保持open。保留先前真实失败,不把重复通过当作全流程完成。
新增可再生时间颜色夹具及脚本,严格TS仍属于04,无依赖或版本改动。
完整CI1799项、339生产TS通过,4种实际bundle入口通过;见[验证](baselines/auto-thumbnail-hidden-renderer.json),
[变更](changes/2026-09-13-PKG-AUTO-THUMB-03-hidden-renderer.md)解释修复和剩余边界。
222项:114 done、12 doing、96 todo;本次是03检查点,任务完成数未增加。
## PKG-AUTO-THUMB-03 源码任务与资源所有权检查点(doing)
生产源码拆为index/options/session/extraction,保持异步公开注册与原有效配置语义。
+6 -2
View File
@@ -4110,10 +4110,14 @@
"evidence": [
"test/browser/auto-thumbnail.spec.js",
"refactor/baselines/auto-thumbnail-failures.md",
"refactor/baselines/auto-thumbnail-failures-validation.json"
"refactor/baselines/auto-thumbnail-failures-validation.json",
"test/browser/auto-thumbnail-pixels.spec.js",
"refactor/baselines/auto-thumbnail-hidden-renderer.json",
"refactor/baselines/auto-thumbnail-timeline-media.json"
],
"compatibleResolution": "Establish actual decoded-frame readiness for the existing timeline/grid and preserve silent independent extraction; do not waive colored pixel checks as unsupported media.",
"closureCriteria": "Candidate source and artifacts generate usable sampled pixels on native browser controls with lifecycle checks; supported Safari and core combinations remain explicit final gates."
"closureCriteria": "Candidate source and artifacts generate usable sampled pixels on native browser controls with lifecycle checks; supported Safari and core combinations remain explicit final gates.",
"workspaceState": "Hidden intrinsic-sized attached decoder mitigates detached WebKit black later frames. Source 45 repeated native cases plus main/legacy 15 each verify lifecycle and cells 2-4 only. Initial cells 0-1 remain diagnostic: transparent/stale draws and Windows WebKit first-frame timing remain unresolved. Bounded retries now reject wrong-time seeked events before drawing. Do not close this risk or task03 based on partial pixel acceptance."
}
]
}
+4 -1
View File
@@ -1783,7 +1783,10 @@
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-13-PKG-AUTO-THUMB-03-lifecycle-checkpoint.md",
"baselines/auto-thumbnail-lifecycle-checkpoint.json"
"baselines/auto-thumbnail-lifecycle-checkpoint.json",
"changes/2026-09-13-PKG-AUTO-THUMB-03-hidden-renderer.md",
"baselines/auto-thumbnail-hidden-renderer.json",
"baselines/auto-thumbnail-timeline-media.json"
]
},
{