mirror of
https://github.com/Silent1566/webhtv.git
synced 2026-10-18 07:09:16 +00:00
修复:拖拽进度时加载中/网速大概率不显示
现象:拖动播放进度条后,加载圈(转圈+网速)基本不出现或一闪即没。 根因是本地 seek 专属进度控制与加载圈兜底之间的时序竞态: CustomSeekView.onScrubStop -> seekListener.onSeekStarted() 先亮圈,showProgress() 随即 App.post(mR2/mR3, 0) 立刻投递网速 ticker,而 seek 命令要等这一跳之后才提交。 ticker 第一跳执行 hidePlaybackProgressIfStale(),此时引擎仍报 READY,于是把刚亮起的 圈收掉。次生缺口:onStateChanged(STATE_READY) 与 onControllerReadyReconciled() 也会 无条件收圈,引擎在 seek 生效前的那次 READY 读数同样收圈。 上游取证:webhtv/Silent1566 与 main 等全部分支均无 seek 专属窗口(onSeekStarted / SeekListener / mSeekProgressFallback 命中数 0),上游的圈纯由 BUFFERING 状态驱动, 且上游没有本地 2839bb40955/4e303d30d34 这两个提交。故不照搬上游(无对应代码可摘, 回退到纯状态驱动会丢掉已交付的本地 seek 进度控制与加载圈兜底),而是按上游语义在本地 补上窗口这一环。 修法:seek 期间打开「最小可见 + 确实可收」窗口,无新增生产类。 - 新增 SEEK_PROGRESS_MIN_VISIBLE_MS = 1200L 与 mSeekProgressPending/StartedAtMs。 取 1200ms 而非 500ms:网速读数由 PlaybackSpeedMeter 相邻两次采样的字节差算出, setTraffic 每秒一跳且每次 hideProgress 都 Traffic.reset() 重设基线,首跳必然空白, 窗口盖不过一跳则圈虽停留、网速仍渲染不出来,只修到诉求的一半。 - onSeekStarted() 先开窗口再 showProgress()(顺序关键,后者会立刻投递 ticker), 最后挂最小可见计时器。 - 新增 canHideSeekProgress():未开窗口放行;开着则要求已过最小可见时长、播放器有效、 READY 且不在真实加载阻塞中(!isLoading() || isPlaying())。 - hidePlaybackProgressIfStale()(症状的直接执行者)、onStateChanged(READY)、 onControllerReadyReconciled()、hideSeekProgressIfReady() 统一走该闸门。 - hideProgress() 同时关窗口(音频舞台路径借此自动收口);showProgress() 在窗口开着时 不摘掉最小可见计时器。 - 曾写 200ms 重试后移除:网速 ticker 在圈可见期间本就每秒重判,自发重试会在播放器长期 报 loading 时变成每秒 5 次的空转唤醒,故窗口收尾只保留计时器 + ticker 两条路径。 有意接受的代价(测试已锁定):缓冲内瞬时 seek 也会多显示约 0.7s 的圈,方向偏向「显示」 而非「不显示」,与诉求一致,不涉及功能或数据。 范围:仅两个 flavor 的 VideoActivity 与测试;未改 native/AAR/依赖/构建配置。 TmdbDetailActivity 内嵌播放器未覆写 onSeekStarted、加载态纯由 isLoading() 驱动, 不存在同款竞态,故未纳入。 Verification: 双 flavor arm64 Debug Java 编译 BUILD SUCCESSFUL;C47SeekLoadingProgressSourceTest 5x2=10、VideoActivityLayoutTest 154、PlaybackOwnershipSourceTest 15x2=30,合计 194 次用例执行 0 failure 0 error 0 skipped(真实执行);两处变异精确命中并已按 md5 恢复(删 hidePlaybackProgressIfStale 的 seek 闸门 -> '网速 ticker 不得收掉挂起的 seek' 变红;最小可见时长 1200->500 -> '须盖过一个网速采样间隔' 变红);git diff --check clean;全仓测试源集无其它用例钉住旧 500ms 形状;未做真机观感验收(本工作区分配的口 192.168.50.3:5561 多次连接被拒,其余端口属其它工作区未占用);未打正式包 Task-Guard: C47
This commit is contained in:
parent
24265785a3
commit
23e5280f37
6 changed files with 391 additions and 22 deletions
Loading…
Add table
Add a link
Reference in a new issue