liberika 的官方客户端,Rust 领域的 mpv。
一款纯粹、强大、模块化、轻量的 Rust 本地视频播放器。
播放全部交给自研内核 liberika,界面由 Bern 编译成每个平台自己的原生控件。
简体中文 · English
为什么是 Erika · Rust 领域的 mpv · 实测数据 · 能做什么 · 从源码构建 · 现状
![]() 纯粹播放:窗口里只有一个等着视频的画框 |
可选功能:每个模块一个开关,右边的小窗跟着变 |
以上都是 macOS 27 上的真实运行画面,视频是 liberika 的介绍片。
- 纯粹:打开就是一个空画框,把视频拖进去就放。不用账号,不用先建媒体库。关掉的功能不留痕迹:不进导航、不进菜单、不进设置。
- 强大:liberika 从解码到渲染一手包办:硬件解码、HDR 与杜比视界映射、ArtCNN 超分辨率,ASS 特效字幕和弹幕都合成在画面里。
- 模块化:弹幕、媒体库、追番、下载等都是独立模块,运行时随时开关,编译时可以整个裁掉;更细的功能写成 JavaScript 插件。
- 轻量:界面没有自绘引擎,也没有内嵌网页,按钮和菜单都是系统自己的控件。macOS 版的完整应用 54.7 MiB,打成安装包 26.9 MiB,空闲时占用约 55 MB 内存。
第一次打开时选一种方式,之后随时可以在「设置 › 可选功能」里改:
| 预设 | 打开的模块 |
|---|---|
| 纯粹播放 | 无。窗口只有画框和最近播放 |
| 看番 | 账号、弹幕、媒体库、新番 |
| 全都要 | 全部模块 |
| 自己挑 | 逐个选择 |
mpv 把内核 libmpv 和播放器放在一起,用 C 写成,很多播放器都在它上面搭建。Erika 和 liberika 是同样的关系,只是换成了 Rust:liberika 是一个可以嵌入任何应用的内核,Erika 是它的官方客户端,也是它最完整的用法。
| mpv | Erika | |
|---|---|---|
| 内核 | libmpv(C) | liberika(Rust) |
| 解码 | FFmpeg | FFmpeg、dav1d |
| 字幕 | libass | libass |
| 弹幕 | 靠第三方脚本 | 内核自带,和字幕一起合成 |
| 界面 | 屏幕控制器(OSC)或第三方前端 | 各平台的原生控件 |
| 脚本 | Lua、JavaScript | JavaScript 插件,按权限运行 |
| 外部控制 | JSON IPC | 命令行与 MCP 服务器,每个按钮都能调用 |
定位相同,不代表功能相同。mpv 多年积累的选项、滤镜和配置方式,Erika 大多还没有。Erika 的播放器只提供 liberika 真正支持的功能,内核没有的,界面上就没有入口:现在没有字幕延迟、音频延迟、画面比例和画中画。
| macOS ARM64 Release 构建 | 全部模块 | 裁掉全部模块 |
|---|---|---|
完整 .app |
54.73 MiB | 44.53 MiB |
压缩后的 .zip |
26.70 MiB | 22.40 MiB |
| 空闲时内存 | 约 55 MB | 约 55 MB |
| 放 1080p 视频时内存 | 约 237 MB | 约 222 MB |
| 放 1080p 视频时 CPU | 11–15% | 15–16% |
bern package 打出的 .dmg 是 26.9 MiB(全部模块)。包里已经静态链接 FFmpeg、dav1d 和 libass,还带着 erika 命令行和 erika-mcp,不需要另外安装什么。
作为参照,Homebrew 的 mpv 0.41 用默认设置(--no-config --hwdec=auto)放同一个文件,内存约 460 MB,CPU 4–9%。mpv 的内存里有它默认较大的缓存,两边的配置并不对等,这里只作参考:Erika 占的内存更少,mpv 占的 CPU 更少。
测量于 2026-11-05,MacBook Air(Apple M4,16 GB),macOS 27.2,Bern 0.1.7,liberika cc297a7。内存是系统「活动监视器」用的 footprint;「全部模块」的版本运行在纯粹播放预设下。空闲是启动 8 到 13 秒后的数值,播放的是 1920 × 1080、30 fps 的 H.264 / AAC 文件,静音,开着硬件解码。
- 打开:拖入窗口、选文件、选文件夹,或者粘贴 http(s) 链接。文件夹里的视频自动排成播放列表。
- 解码:硬件解码(macOS 用 VideoToolbox,Windows 用 D3D11VA,Linux 用 NVDEC / VA-API),失败时回退软件解码,也可以在设置里关掉。
- 画面:Metal、Direct3D 11 和 wgpu 三套渲染;HDR 自动启用,支持杜比视界映射。
- 接着看:进度跟着文件走(前 16 MiB 的 MD5 加文件大小),文件改了名、换了地方也能接上。
- 控制:倍速、音轨切换、章节跳转、片头片尾跳过提示、上下集与自动连播、带字幕的 PNG 截图、迷你播放器。
- 快捷键:空格、方向键、
F、D这些默认按键都能在设置里改,互相冲突时会告诉你。
内嵌轨道和外挂文件都能用。ASS 由 libass 绘制,读取视频里附带的字体,定位、描边和特效都还原;字号可调,可以开双倍采样让字幕更细腻。
| 模块 | 做什么 |
|---|---|
弹幕 danmaku |
自动加载同名 .xml / .json,挂载 B 站 XML 与弹弹play JSON;登录弹弹play 后按文件指纹匹配弹幕、发送弹幕;透明度、字号、速度、显示区域、偏移和屏蔽 |
画质增强 enhance |
ArtCNN 亮度超分辨率 |
媒体库 library |
扫描本地文件夹,自动认出番剧、电视剧和电影,手动匹配;挂载 NipaPlay 与弹弹play 的共享媒体 |
追番 anime |
首页、新番时间表、番剧详情与短评 |
账号 account |
登录弹弹play 与 Bangumi |
账号同步 sync |
一个 .ebp 备份文件带走全部数据;WebDAV 三方合并同步;令牌和密码用同步口令加密 |
下载 downloads |
BT 下载:磁力链接和 .torrent,暂停、续传、边下边播 |
网络媒体源 sources |
入口已留好,还没有实际功能 |
局域网与远程 remote |
打开后这台设备就是一台远程访问主机,见下面的「远程访问」 |
模块之间有依赖:账号同步需要账号,网络媒体源与局域网和远程需要媒体库。开关时 Erika 会按依赖处理;构建时排除了还被依赖的模块,会直接报错。
打开「设置 › 局域网与远程」里的开关,这台设备就在端口 1180 上服务:
- 浏览器:直接打开设置里列出的地址,就是 Erika 的 WebUI。页面和窗口共用同一个引擎,看同一份媒体库和设置;在页面里开始的视频由浏览器解码播放,别的设备不用安装任何东西。
- NipaPlay:和 NipaPlay 的远程访问完全兼容。NipaPlay 能在局域网里发现这台设备,看它的媒体库、按范围串流视频和字幕,写回播放进度。
- 遥控:其他设备可以控制这里的播放,第一次要在这台设备上确认,勾选「信任此设备」后不再询问。
这个服务不要密码,地址就能打开,所以默认关闭,只在信任的网络里打开。
每种电脑系统都有一个 headless 包,没有窗口,适合放在 NAS 或服务器上。平时在浏览器里用 WebUI 操作,界面和桌面版一样;命令行 erika 和 MCP 服务器 erika-mcp 给脚本和 AI 用,三者连的是同一个引擎。
解压后运行 bin/erika-host(Windows 是 bin\erika-host.exe),它在前台运行,启动后打印两行:
engine 76b71933e38e00
open http://127.0.0.1:4179/#token=dd825a72…
- 这台机器上:打开
open后面的地址。它只监听本机,地址里的 token 就是口令。端口每次随机,用--port 4179可以固定。 - 局域网里的其他设备:打开
http://<这台机器的地址>:1180/。无头版第一次启动时就打开远程访问,这个服务不要密码,只放在信任的网络里。
浏览器的文件夹选择器读不到服务器的磁盘,媒体库用命令行添加,--engine 填启动时打印的那个编号:
bin/erika --engine 76b71933e38e00 library add-folder --folder '{"url":"file:///srv/anime/"}' --content Anime--content 可以是 Anime、Series 或 Movie。远程访问的开关和端口在 WebUI 的「设置 › 局域网与远程」,也可以用命令行改:
bin/erika --engine 76b71933e38e00 remote set-port --port 8080
bin/erika --engine 76b71933e38e00 remote set-enabled --enabled false设置和媒体库保存在系统的应用数据目录,重启后还在。要长期运行,交给 systemd、launchd 这类服务管理器。macOS 的包没有签名,从浏览器下载后先运行 xattr -dr com.apple.quarantine <解压出的文件夹>。
不是人人都要的功能写成插件。「设置 › 插件」里的市场读 erika_plugins:AI 防剧透、底部进度条、弹幕密度图、倍速扩展、自动弹幕偏移等,打开开关就能用。
插件用 JavaScript 编写,只能调用自己声明过的权限。单独分发时是一个 .epk 文件,NipaPlay 的单文件 .js 插件也能直接导入。
中文和英文界面,浅色、深色或跟随系统,四种主题色,两款应用图标。
每次构建都会在 target/bern/<平台>/bin/ 生成 erika 命令行和 erika-mcp 服务器,它们驱动的是正在运行的 Erika。
erika erika open-file --source file:///path/to/video.mkv
erika media state --player-id video
erika ui inspectAI 执行这些命令和你点按钮走的是同一条路。按钮被禁用或目标不存在时,它收到的是明确的错误,不是一次没有效果的点击。
播放是 liberika 的事。 Bern 的 Video 视图给 liberika 一个原生表面和帧时钟,之后的解码、音画同步、字幕、弹幕和渲染都在内核里完成,界面只发命令、读状态。
// erika-ui/src/player.rs
Video(id: video, player: players.video, label: app.title,
controls: none, sizing: fill, fit: contain)界面写一次,编译成各平台自己的代码。 界面用 Bern 的 ui! 声明写在 Rust 里,构建时生成 SwiftUI、WinUI 3、GTK 4、Jetpack Compose 和 Web 的源码。电脑、手机和电视共用同一份引擎和声明,只是布局不同:
// erika-ui/src/lib.rs
Adaptive(id: shell) {
Layout(size: compact) { phone_shell(/* … */) }
Layout(size: tv) { tv_shell(/* … */) }
Layout(size: expanded) { /* … */ }
}模块是真的模块。 每个模块有自己的协议、引擎和界面,放在 modules/<模块>/,optional = true 让它能在运行时关闭。构建时用 --exclude-module 排除,它不会进生成的工程,代码和依赖都不在包里:
# 只保留外壳与基础播放
bern build --target macos --release \
--exclude-module account,danmaku,enhance,anime,library,sync,sources,remote,downloads命令行和 MCP 来自同一份协议。 协议里的每条命令、界面上的每个控件都有名字,Bern 据此生成 erika 和 erika-mcp。
在 Releases 下载,文件名是 Erika-版本-系统-架构[-headless]。
| 系统 | 架构 | 包 |
|---|---|---|
| macOS | x64、arm64 |
.dmg;无头版 -headless.zip |
| Windows | x64、arm64 |
-setup.exe、.zip;无头版 -headless.zip |
| Linux | x64、arm64 |
.deb、.tar.gz;无头版 -headless.tar.gz |
| Android(手机、平板、电视) | arm64、armv7、x64 |
.apk |
| iOS、iPadOS | arm64 |
.ipa,iOS 16 起 |
| Apple TV | arm64 |
.ipa |
macOS、iOS、Apple TV 和 Windows 的包没有开发者签名:.ipa 要用 AltStore、Sideloadly 等工具以自己的 Apple ID 签名安装。Linux 版使用系统的 FFmpeg 8,需要 Ubuntu 26.04 或同样新的发行版。
| 平台 | 界面 | 画面 | 播放 |
|---|---|---|---|
| macOS | SwiftUI | Metal | ✅ liberika |
| Windows | WinUI 3 | Direct3D 11 | ✅ liberika |
| Linux | GTK 4 | wgpu | ✅ liberika |
| Web | DOM + WebAssembly | WebCodecs + WebGL2 | ✅ liberika 的浏览器后端 |
| iOS、iPadOS | SwiftUI | Metal | ✅ liberika |
| Apple TV | SwiftUI | Metal | ✅ liberika |
| Android、Android TV | Jetpack Compose | Vulkan(wgpu) | ✅ liberika |
Web 有两种形态:web_app 把引擎也编译进页面,纯静态部署;web_ui 的页面连接一个原生的 erika-host。
先装好 Rust,rust-toolchain.toml 固定了 Rust 1.99.0,第一次运行 Cargo 时会自动选择。然后装上 Bern 的构建工具 bern,版本和 Erika 用的 Bern 一致:
cargo install --locked --git https://github.com/AimesSoft/Bern --rev ccfe43fb53595252e34ed9e10e0ce95beaab1339 bern-cli取得 Erika,再准备 liberika 的原生依赖(FFmpeg、dav1d、libass 等,静态编译,一次即可):
git clone https://github.com/AimesSoft/Erika.git
cd Erika
ERIKA_LIBERIKA_ROOT="$(python3 web/dependencies.py)"
cargo run --manifest-path "$ERIKA_LIBERIKA_ROOT/Cargo.toml" -p xtask -- \
deps build --all --profile lgpl --target aarch64-apple-darwin--target 换成这台电脑的平台。这一步需要 cmake、meson、ninja 和 pkg-config(macOS 上用 Homebrew 安装)。Windows 和 Linux 的准备方式不同,见依赖说明。
然后运行:
bern run手机和电视的原生依赖按它们的目标编译,具体命令见 发版工作流。
bern run 构建并打开这台电脑上的版本。bern build --target <平台> --release 构建某个平台,bern package --target <平台> 生成安装包,bern doctor 列出这台电脑构建各平台还缺什么。
| 目标 | 平台 |
|---|---|
macos |
macOS |
windows |
Windows |
linux |
Linux。需要 liberika 的 wgpu-hal 补丁,写进 .cargo/config.toml,见依赖说明 |
web_app、web_ui |
浏览器。另需 Emscripten,见浏览器播放 |
ios、tvos |
模拟器 |
android |
Android 手机 |
同时修改 Bern 或 liberika 时,把它们放在 Erika 旁边,再把 .cargo/config.local.example.toml 复制成 .cargo/config.toml。
Erika 还在开发中,版本号是 0.1.0。
- 实际播放过:macOS 实机、Windows 实机、Steam Deck(SteamOS,Wayland)、Chrome,iPhone、iPad、iPhone Duo 与 Apple TV 模拟器,Android 手机、平板与 Android TV 模拟器。
- 还没上真机:iOS、Apple TV 与 Android 目前只在模拟器上用真实内核播放过。
- 还是示例或占位:网络媒体源。
- 识别服务器:电视剧和电影由 Erika 内置的识别服务器认,它现在没有域名,请求走明文 HTTP。
远程访问的接口按 NipaPlay 的源码实现,用模拟客户端逐条验证过,还没有和 NipaPlay 应用本身对接测试。
| 路径 | 内容 |
|---|---|
Bern.toml |
应用清单:语言、模块、构建目标 |
erika-protocol/ |
外壳的协议:状态与命令 |
erika-core/ |
外壳的引擎:播放、设置、账号、插件 |
erika-ui/ |
外壳的界面:窗口、侧栏、播放器、设置、首次启动 |
erika-store/ |
设备上的 SQLite 数据库 |
erika-dandanplay/ |
弹弹play 与识别服务器的客户端 |
erika-torrent/ |
BT 下载 |
erika-gateway/ |
识别服务器前面的指纹网关 |
modules/ |
九个可选模块,各有 protocol、core、ui |
web/ |
浏览器播放的扩展与测试 |
server/ |
新番与评论的公开缓存服务 |
docs/ |
技术文档 |
design/ |
界面设计文档、交互原型和品牌素材 |
Erika 的代码使用 MIT 协议。design/assets/ 里的海报和第三方图标归各自的权利人所有,不在此列。Erika 是播放器,不提供任何视频内容;弹幕和番剧资料来自下面的第三方服务。


