插件
项目自带两个插件;事实上其它东西也都是插件 —— Kotlin 加载器、HTTP 后端、HLS 适配器。内核本身不认识任何协议。
官方插件
HLS VOD Backend
把 `.m3u8` 当作**要拼装的流**而不是要保存的文本文件:解析清单、选码率、分片并发(分片级重试)、AES-128 解密、字节范围。
dev.turbodl:turbo-plugin-hls:0.2.2.0
JavaScript Plugin Loader
加载用 JavaScript 写的 TurboDL 插件。每个脚本一个 QuickJS runtime 与 context、一套稳定的 `host`/`plugin` ABI,以及一套「绝不在脚本还在执行时关掉 runtime」的加载/卸载流程。
dev.turbodl:turbo-plugin-js:0.2.2.0
插件分类
插件在清单里声明一个分类。分类只说明它能接到哪里,不说明别的。
| 分类 | 接到哪里 |
|---|---|
| turbodl-backend | 协议后端(替换或扩展内置 HTTP 引擎)。 |
| turbodl-protocol | 声明它处理哪些协议 / scheme(清单的 `protocols` 列表)。 |
| turbodl-adapter | 对接外部下载器。 |
| turbodl-parser | 把分享链接 / 磁力 / 口令变成下载请求。 |
| turbodl-hook | 观察或改写请求与结果。 |
| turbodl-loader | 加载用别的语言写的插件 —— JS 加载器就属于这一类。 |
写一个自己的插件
插件就是一个实现了某个接口的普通类。第三方插件通过 GitHub topic + 清单被发现 —— 没有需要注册的中心仓库。
Kotlin
class MyPlugin : Plugin {
override val id = "parser.example"
override fun onLoad(context: PluginContext) {
context.registerExtension(ExtensionPoints.LINK_PARSER, LinkParser { input ->
input.takeIf { it.startsWith("example://") }
?.let { listOf(DownloadRequest(url = it, destination = File("out.bin"))) }
})
}
}关于安全,说清楚
本项目没有签名与验证流程,所以本站不声称有。来自本仓库的插件就是来自本仓库;来自别处的代码就是别人的代码 —— 运行时能强制的东西,就是上面那张分类表。