# 下载引擎 同一个链接,在某个引擎手里卡住,换一个可能就下动了,反过来也成立。YunGet 里放了四套下载实现,设置里可以随时换。这篇讲清楚四套各自是什么、什么时候该选谁,以及 Gopeed 的内核为什么要在应用里手动导入一次。 ## 为什么不止一个引擎 默认走 TurboDL。它是一套独立发布的下载 SDK(内置的是 {{引擎版本}}),做了多线程 Range 分片、断点续传、动态分段,HLS 交给插件处理,日常的 HTTP/HTTPS 直链基本都靠它。 但有些任务它压根做不了。磁力和 BT 跟 HTTP 直链不是一回事,得指望 Gopeed 的 Go 内核。项目早期自己写的那套下载器也留在代码里,删掉没什么好处,就当成兜底选项留着。aria2 平时用不着,主要拿来对照排查:某个链接在 TurboDL 里出问题,换成 aria2 试试,就能分清是链接本身有问题,还是引擎处理得不对。 所以设置里的引擎切换更像一个应急出口,而不是让你天天调参的地方。 ## 四个引擎分别是什么 | 引擎 | 实现 | 什么时候用 | |---|---|---| | TurboDL | `TurboDownloadManager`,架在 `TurboBootstrap` + `TurboClient` 上 | 默认选择,普通 HTTP/HTTPS 直链 | | 内置兼容引擎 | `LegacyDownloadManager` + `AdaptiveDownloadEngine` | 兜底 | | aria2 | APK 里自带的 `libaria2c.so` | 实验性,用来对照排查 | | Gopeed | 跑在应用进程里的 Go 内核(gomobile 编译) | 磁力 / BT 这类任务 | **TurboDL** 是默认引擎,代码里是 `TurboDownloadManager`,底下由 `TurboBootstrap` 启动、`TurboClient` 干活。普通 HTTP/HTTPS 直链、分片并发、断点续传、插件形式的 HLS 都归它管,还支持现场诊断(把连接状态一类的信息导出来看)。没有特别理由就别换。 **内置兼容引擎**在设置里显示为「内置下载器」,标着 Legacy,实现是 `LegacyDownloadManager` 加 `AdaptiveDownloadEngine`。它是项目早期的写法:固定开比较满的并发、4 MB 一块、用工作窃取调度。有两点和 TurboDL 不一样——它没有现场诊断,也不持久化请求头,所以那些靠会话(cookie、鉴权头)才能下的链接,它接不住。 **aria2** 是实验性的。二进制就是 APK 里的 `libaria2c.so`,实际版本是 aria2-next 2.8.3,只有 arm64 设备可用。并发参数 `-x` 保守取 16,再往上容易触发网盘的风控,反而下不动。HTTPS 需要一份 CA bundle,应用会从系统证书目录自动拼好,不用你手动准备。 **Gopeed** 是跑在应用进程内的 Go 内核,用来做内置分片器做不到的事,比如磁力和 BT。它的内核不随 APK 分发,得你在「下载引擎」页里手动导入一次。 ## 怎么切换 设置分两层。第一层选「内置下载器」还是「Gopeed 引擎」;选了「内置下载器」之后,下面还有一层,再挑 TurboDL、内置兼容还是 aria2。 改完不会立刻生效,要重启应用——正在跑的任务底下的引擎被临时抽掉会出问题。重启之后,新引擎对之后建的任务生效。 有几个边界情况值得知道: - 选了 Gopeed 但内核还没导入:本次任务会走内置路径,不会因为找不到内核就直接报错。 - 应用启动时发现设置里选着 Gopeed、而内核文件不在:会把设置改回「内置下载器」。 - 已经明确用了哪个引擎,建任务却失败:不会悄悄换一个引擎继续下。报错总比「换个下载器默默下完」容易排查。 ## Gopeed 内核怎么来 内核包来自上游维护的公开构建仓库 `CYQawa/yunx_gopeed_build` 的 Release。应用按本机的 ABI 去匹配对应的 `libgopeed-.aar`,下载通道有三条:GitHub 直链、GitHub 加速镜像、网盘。Release 说明里带了 `[网盘下载](链接)` 的时候,应用会多给你一个「网盘更新」入口。 校验这件事得说清楚,别指望它有签名: - 走 GitHub 通道,会比对 Release 资产里的 sha256。 - 走网盘通道,拿不到摘要,跳过 sha256 校验,只校验下载后的大小。 也就是说,网盘通道能保证的只有「文件大小对得上」,没有签名校验这一层。 解开之后内核装到 `filesDir/gopeed/lib/libgojni.so`,引擎数据放在 `filesDir/gopeed/store` 和 `filesDir/gopeed/tmp`,导入完成后临时包会删掉。运行期的 Gopeed 不监听任何 TCP 端口(apiEnable 是关的)。 ## HLS 的两条路 用哪个引擎,决定了 HLS 走哪条路。 TurboDL 这边交给 `turbo-plugin-hls` 插件:解析 M3U8、分片并发,支持 AES-128 解密和 EXT-X-BYTERANGE。内置兼容引擎有自己的一套轻量实现,能力弱一些,AES 加密和 BYTERANGE 都不支持。 如果你下载加密的 HLS 失败,先看一眼当前用的是不是 TurboDL——默认就是它,正常情况下不用管这件事。 这里的 HLS 指的是下载能力,不是播放器。 ## 并发口径 TurboDL 单任务的上限能开到 256,应用把默认值和上限装配成了「连接数上限 16、诊断档位上限 64」。理由不复杂:网盘服务端普遍有风控,连接数拉满往往比 16 还慢。 还有一点,并发是上限而不是硬性目标。一个文件只切出 5 个可调度的分片时,实际并发就是 5,想再多也没有东西可下。