多线程并发下载引擎——边下边播还能断点续传
下载引擎架构
Baka 的下载功能不是简单的 HTTP 请求,而是一个独立的多线程下载引擎:
┌─────────────────────────────────┐
│ 下载任务调度器 │ 管理多个下载任务的排队与优先级
├─────────────────────────────────┤
│ 多线程下载器(分块) │ 将大文件切成小块,多线程同时下载
├─────────────────────────────────┤
│ 断点续传管理器 │ 记录每个块的下载进度,断电可恢复
├─────────────────────────────────┤
│ 边下边播接口 │ 下载同时 mpv 可以边下边播
└─────────────────────────────────┘
为什么用多线程
传统单线程下载的瓶颈:
- 文件从服务器依次分块传输,速度受单个连接限制
- 服务器带宽分配可能对单连接限流
- 网络抖动时单线程下载容易中断
多线程的改进:
- 将视频文件切成 4~16 块并行下载
- 总带宽 = 各线程带宽之和(理想情况)
- 某些服务器对多连接更友好,反而更快
- 单个线程中断不影响其他线程
下载速度的影响因素
| 因素 | 影响 | 说明 |
|---|---|---|
| 源站带宽 | 最大瓶颈 | 番剧源服务器的上行带宽 |
| 你的网速 | 硬上限 | 家庭宽带 / 移动网络的下行带宽 |
| 线程数 | 有上限 | 超过 8~16 线程后收益递减 |
| 服务器限流 | 显著 | 部分番剧源对下载请求有限速 |
| CDN 节点 | 间接影响 | 离你近的 CDN 节点速度快 |
实际速度参考:
- 100Mbps 宽带 + 优质源:1080p 一集约 1~2 分钟
- 50Mbps 宽带 + 普通源:1080p 一集约 3~5 分钟
- 移动网络:速度不稳定,建议 Wi-Fi 下载
边下边播
Baka 支持"边下边播"模式——即使下载还没完成,也可以开始观看:
- 下载引擎先缓冲一小段数据(约 10~30 秒)
- 通知播放器可以开始播放
- 下载继续进行,播放器同时读取已下载的数据块
- 如果下载速度跟不上播放速度,播放器会暂停等待缓冲
优点:
- 节省等待时间(不用等全集下载完再看)
- 可以中途不喜欢就停止下载,不浪费空间
缺点:
- 需要播放器支持流式读取部分文件
- 如果下载速度太慢可能频繁缓冲
下载队列管理
可以同时管理多个下载任务:
- 并发数:默认同时下载 2~3 个,可以设置
- 优先级:可以给某个任务设高优先级,优先下载
- Wi-Fi 自动下载:仅在 Wi-Fi 环境下自动开始排队中的下载
- 后台下载:切换到其他应用后下载继续(需要保持 Baka 在前台或后台服务运行)
下载失败的重试
Baka 的下载引擎有自动重试机制:
- 单个线程失败:立即重试(最多 3 次)
- 整块下载失败:标记为异常,等其他块完成后重试
- 全局网络断开:暂停所有任务,网络恢复后继续
- 服务器返回错误(403/404):尝试切换其他源的同一集