Skip to content

整体架构

AniBaka 采用“平台界面 + 共享服务 + 规则运行时 + 媒体运行时”的分层结构。UI 不直接理解每个站点协议,规则解释器也不直接依赖 Flutter 控件。

1. 表现层

lib/pages/ 组织页面,lib/widgets/ 提供复用组件和平台专属表面。桌面、移动与 TV 可以拥有不同布局,但通过服务层读取相同的业务状态。

关键入口:

  • lib/main.dart:应用启动。
  • lib/app_state.dart:应用级状态。
  • lib/pages/:首页、搜索、详情、播放器、设置等页面。
  • lib/widgets/platform/:Windows、macOS、TV 专属界面。

2. 应用服务层

lib/services/ 负责编排数据、缓存、持久化和跨模块流程。典型服务包括:

服务职责
HomeDataService首页内容、分页与缓存
BgmService番剧元数据匹配与补全
PlayerService选集、线路、解析结果和播放状态
SourceAdapterService内置源与自定义源生命周期
RuleRepositoryService订阅、索引缓存、安装与更新检测
DownloadServiceMP4/HLS 下载任务
TorrentServiceTorrent 下载与本地流式播放

3. 规则运行时

规则运行时把站点差异限制在 JSON 管线中:

text
Rule Hub index

SourceCodec / CustomSourceConfig

RuleMigrator → SourceRule → RuleValidator

PipelineSourceAdapter

PipelineInterpreter ↔ PipelineHost

PipelineInterpreter 只认识操作符与上下文;PipelineHost 提供 HTTP、DOM、URL 归一化和 WebView 能力;PipelineSourceAdapter 把两者接入上层统一的 AdapterBase

4. 媒体运行时

播放阶段不止返回 URL。最终结果可以同时携带:

  • 媒体 HTTP Headers。
  • 允许携带的 Cookie 名称或前缀。
  • 需要维持的播放授权。
  • 需要本地物化或代理的 HLS 清单。
  • 是否绕过系统代理直连。

解析完成后由 PlayerServicemedia_kit 打开媒体。Torrent 资源则通过本地 HTTP 流服务提供给播放器。

5. 数据与持久化

  • Hive / SharedPreferences:本地配置、缓存与安装状态。
  • 文件系统:下载、字幕、日志和媒体库。
  • WebDAV:远程媒体库。
  • 可选账户接口:播放历史等同步能力。

一个播放请求如何流动

  1. 页面选择番剧与剧集。
  2. PlayerService 根据 source key 找到适配器。
  3. 适配器执行 detail 或复用已经预取的剧集目录。
  4. PipelineInterpreter 执行 play 管线。
  5. 宿主完成网络、Cookie、WebView 或解密工作。
  6. 适配器整理媒体 URL 与 Headers,并进行必要的直链校验。
  7. 播放器打开媒体;会话协调器负责切集、换源与回收。

文档内容采用项目许可证约束;第三方站点与内容不由 AniBaka 提供。