Skip to content

[P0][render] 时间轴渲染/播放引擎整体失效:中途卡死 + 渲染无效 + 暂停抽搐 —— 需按上游单表面(#53 流式引擎)重写,勿再打补丁 #151

Description

@appergb

现状(用户实测,0.1.5)

整套时间轴渲染/播放引擎逻辑失效,到处是 bug,不可用:

已尝试的增量修复(均未能根治)

PR #144 在双表面模型上做了大量增量修复,但无法从根上解决:

架构根因(为什么增量修不好)

浏览器/WebView 里的**「双表面 + 双时钟」与上游「单表面 AVPlayer」**本质不兼容:

当前(双表面) 上游(单表面)
播放 DOM <video>(只 opacity,不合成变换/裁剪/文字) 一个 AVPlayer 持续播出 composition
暂停/scrub Rust composite_frame每帧 spawn 一个 ffmpeg + wgpu + PNG(→ 卡死根源 #92) 同一 AVPlayerLayer 冻结在精确帧
时钟 两个 rAF/解码时钟靠状态机切换 → 切换处帧不一致(抽搐 #149) 一个 composition 时钟,play/pause/seek/scrub 全走它

上游 VideoEngine.swift = 一个 AVPlayer + 一个 AVPlayerItem(composition + videoComposition + audioMix),永不抽搐、不卡死。我们在浏览器里用两套不同时钟驱动两个表面、并在暂停处做表面切换,所以注定有「切换帧不一致(抽搐)+ 逐帧合成(卡死)」。

真正的修复方向(非补丁)

停止给双表面打补丁,实现 #53 流式引擎(= 上游单表面的浏览器等价物):

关联

#142(剪辑/播放总根因 epic)、#92(逐帧合成卡死,CRITICAL)、#100(真实播放/scrub 引擎)、#53/#63/#64/#65(流式引擎及其子项)、#149(暂停/按钮)、#125(合成帧居中)、#131(编解码无缝切换缺口)。

给修复者

PR #144 的增量修复可作为「单时钟 + 实时拖拽 + 状态机选面」的脚手架参考,但渲染保真 + 不卡死 + 不抽搐三者必须靠 #53 重写才能同时满足。建议直接做 #53,不要再在双表面上叠补丁。

Metadata

Metadata

Assignees

Labels

P0阻塞性 Bug,必须优先修复area:media媒体引擎(FFmpeg/wgpu)bugSomething isn't workingfrontend前端相关timeline时间线相关

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions