yt-dlp 内核自动更新 — Seal 如何应对视频站变化
为什么 yt-dlp 需要单独更新
Seal 应用本体是 Kotlin 写的 UI 和下载管理器,yt-dlp 是独立的 Python 脚本——负责解析各视频站页面结构。但视频站的页面是一直在变的:
- 加了新的反爬验证
- 改了页面 DOM 结构
- 换了新的播放器后端
这些变化会让旧版 yt-dlp 解析失败。yt-dlp 社区几乎每周都有新提交来应对这些变化——所以 Seal 不应该和 yt-dlp 一起打包死,而是允许应用内自动更新。
Seal 的 yt-dlp 更新机制
- v1.9.0:引入 yt-dlp 自动更新开关,提供"稳定版 vs Nightly 版"两种更新通道
- v1.9.0:同时引入"预览频道(Preview channel)"用于 Seal 应用自身的自动更新
- v1.12.0:默认改用 nightly 构建的 yt-dlp(更及时应对网站变化)
- v1.12.1:新增更新间隔设置(auto update interval),控制多久检查一次新版本
- v1.12.1:更新期间自动阻塞下载(防止更新和下载同时进行导致损坏)
更新损坏的经典 bug:bad local file header
v1.12.1 的 CHANGELOG 里有这个已知问题:
yt-dlp might be broken if you tried to download something while it was updating (
bad local file header)
含义:如果你恰好在 Seal 自动更新 yt-dlp 的同时发起了下载,下载的 Python 包可能不完整,下次解析时就会报这个错误。
修复方法:
- 等 Seal 自动更新完再用(v1.12.1 起更新期间会自动阻塞下载,所以正常不会遇到)
- 如果还是遇到,手动去设置里触发一次 yt-dlp 更新(强制重新拉完整包),更新完就好
- 如果还是不行,清除 Seal 应用数据(注意会清掉历史记录)
v1.12.1 之前的版本没有"更新期间阻塞下载"这个保护,遇到这个问题概率更高。用 v1.12.1 及以上版本就不会遇到这个时序问题。
推荐设置
| 选项 | 建议 |
|---|---|
| yt-dlp 更新开关 | 开启 |
| 更新间隔 | 1-3 天(取决于你下载频率) |
| 版本通道 | 稳定版 vs Nightly(稳定版更稳、Nightly 更新更勤) |
| Seal 自身更新 | F-Droid 客户端会提示;GitHub 版自己盯 Release |
继续到 通知与后台下载 看下载时的通知表现。