断点续传——下载中断了怎么办
断点续传的意义
下载一部番剧全集可能需要几十分钟甚至几小时,中途遇到以下情况很常见:
- Wi-Fi 信号突然中断
- 手机切换到移动数据网络
- 接了个电话导致应用进入后台被杀
- 手机没电自动关机
- 手动暂停后想继续
没有断点续传的话,中断后只能从头下载,前功尽弃。Baka 的下载引擎专门设计了断点续传机制。
实现原理
Baka 下载视频时会创建两个文件:
episode05.mkv ← 实际下载的视频文件(逐步增长)
episode05.mkv.download ← 下载进度记录文件(隐藏文件)
.download 文件记录:
- 总文件大小
- 每个下载块的范围(offset + length)
- 每个块的下载完成状态
- 当前活动线程数
- 服务器返回的 ETag(用于验证文件是否变化)
续传流程
上次下载中断(下载到 60%)
│
▼
重新打开 Baka,点击"继续下载"
│
▼
读取 .download 文件,恢复进度
│
▼
检查服务器文件是否变化(对比 ETag)
│
├─ 没变化 → 继续下载剩余块
└─ 变化了 → 提示用户从头下载
│
▼
从上次断点继续,完成剩余 40%
不同中断场景的处理
| 中断场景 | 处理方式 | 成功率 |
|---|---|---|
| 暂停后手动继续 | 直接继续,无任何问题 | 100% |
| 应用被系统后台杀掉 | 重新打开应用,识别未完成任务 | ~95% |
| 手机重启 | 重启后自动扫描续传 | ~90% |
| 断网后恢复 | 网络恢复后自动继续 | ~85% |
| 服务器文件更新 | 检测到 ETag 变化,从头下载 | 提示用户 |
| 源站完全不可用 | 提示切换其他源 | 需手动 |
续传失败怎么办
偶尔续传可能失败,常见原因:
源站不支持 Range 请求:断点续传依赖 HTTP Range 头,如果源服务器拒绝这个请求,续传会失败。Baka 会检测这种情况,失败时自动从头下载。
进度文件损坏:极少数情况下 .download 文件可能损坏。可以尝试:
- 删除对应的
.download文件 - 从源文件大小判断已有数据量
- 如果已有数据量接近完整,可以手动删除
.download让 Baka 检查完整性
文件被其他进程占用:下载中的文件被其他 App(如文件管理器)占用,可能导致写入失败。关闭占用进程后重试。
下载完成后的校验
下载完成后,Baka 会做完整性检查:
- 对比文件大小与源站声明
- 检查视频文件是否能被 mpv 正常解码(试播放前几秒)
- 如果校验失败,自动重新下载
注意:部分文件因编码或容器格式问题,大小匹配但内容有损坏。这种情况需要手动删除后重新下载。
存储位置管理
下载文件默认保存在 Baka 的专属目录,可以在设置中修改:
- Android:
/Android/data/ani.baka/files/downloads/ - 桌面端:默认在用户文档目录下的 Baka 文件夹
- 建议将下载目录设到存储空间充足的位置(SD 卡或外接硬盘)
下载文件是否可以直接播放
是的,Baka 下载的视频文件是标准格式(MKV/MP4/WebM 等),可以被任何播放器直接播放。下载完成后会自动关联到本地库,方便管理。