Rust media player kernel
29
stars
397
commits
Rust
primary language
Sep 7, 2026
updated
「GOOD!我是Erika,是NipaPlay里继mdk、video player、libmpv、media kit之后的第五个播放器内核。」 「即便算上你,也只有四个播放器内核!」
NipaPlay 的自研播放内核。 Rust 实现,可嵌入,从解码到渲染一手包办。
名字取自《海猫鸣泣之时》的侦探 古戸ヱリカ。 而 NipaPlay 来自《寒蝉鸣泣之时》古手梨花的口癖「にぱー☆」——社区里大家都叫她「梨花」。 一个是台前的播放器,一个是幕后的引擎。同出一脉,互为表里。
宿主应用只需提供一个渲染表面并发送播放命令——解码、时序同步、音视频渲染、字幕、弹幕、音频输出均由 Erika 内部完成,不经过宿主的渲染管线。
erika.h 中的导出声明为准use erika::{Player, PlayerConfig, MediaRequest};
let player = Player::new(PlayerConfig::default())?;
player.open(MediaRequest::file("/path/to/video.mp4"))?;
player.play()?;
#include "erika.h"
ErikaPresenterHandle *presenter = erika_presenter_create();
erika_presenter_attach_metal_layer(presenter, (uint64_t)layer, w, h, scale);
erika_presenter_open(presenter, "/path/to/video.mp4");
erika_presenter_play(presenter);
// 每个显示帧回调:
ErikaPresenterStats stats;
erika_presenter_render_tick(presenter, host_time, &stats);
final player = ErikaPlayer();
await player.open('/path/to/video.mp4');
await player.play();
// 推荐:完整播放器 UI 在 macOS/iOS/tvOS 使用原生 window overlay / 挖空路径
ErikaWindowOverlayVideoView(player: player)
// 兼容/诊断:Flutter platform view 路径
ErikaVideoView(player: player)
erika_flutter is published on pub.dev
for macOS, iOS, tvOS, Windows, Android, and HarmonyOS/OpenHarmony. Add it to a
Flutter app with:
flutter pub add erika_flutter
The package downloads the matching verified native runtime during the platform build. Android downloads only the selected ABI archive; Linux and Web are not published targets yet.
The native ArkTS package erika is published on
OHPM for OpenHarmony arm64
applications (API 18+). Install it with:
ohpm install erika
See the OpenHarmony package guide for the
ErikaPlayer API and XComponent surface setup.
原生 macOS、iOS 和 tvOS 应用可通过 Swift Package Manager 使用
ErikaSwift。在 Xcode 的
Add Package Dependencies 中输入:
https://github.com/AimesSoft/ErikaSwift
SwiftPM 会自动下载对应的 Apple XCFramework,不需要安装 Rust、FFmpeg、 CocoaPods 或 Flutter。
Erika 提供两组 C ABI 入口,适配不同嵌入场景:
| 接口族 | 适用场景 | 渲染方式 |
|---|---|---|
ErikaHandle | 宿主自己管理渲染循环 | 宿主拉取帧数据 |
ErikaPresenterHandle | Erika 托管完整播放栈 | 宿主只需提供 surface 并驱动 render_tick |
头文件: crates/erika_capi/include/erika.h
| 平台 | 解码 | 渲染 | 音频 | 状态 |
|---|---|---|---|---|
| macOS 14+ | VideoToolbox | Metal | CoreAudio | 可用 |
| iOS 16+ | VideoToolbox | Metal | AudioQueue | 可用 |
| tvOS 13+ (Apple TV) | VideoToolbox | Metal | AudioQueue | 可用 |
| Windows 10+ | D3D11VA | Direct3D 11 | WASAPI | 可用 |
| Linux | — | wgpu (planned) | — | 规划中 |
| Android 8+ | MediaCodec / software | wgpu (Vulkan + GLES fallback) | AAudio | 可用 |
| HarmonyOS API 18+ | AVCodec(H.264/HEVC)/ 软解 | wgpu (Vulkan) + OHNativeBuffer 零拷贝导入 | OHAudio | 可用 |
crates/erika 核心播放库
crates/erika_capi C ABI 导出层
crates/erika_ffmpeg_sys FFmpeg 底层 bindings
packages/erika_flutter Flutter 插件 (macOS + iOS + tvOS + Windows + Android + HarmonyOS)
packages/erika_ohos OpenHarmony ArkTS / OHPM package
examples/ 验证与演示程序
xtask/ 原生依赖构建编排
docs/ 架构与嵌入文档
erika_capi 库下载与打包(英文)x86_64-pc-windows-msvc)aarch64-unknown-linux-ohos target# 构建 FFmpeg (LGPL profile)
cargo run -p xtask -- deps build --profile lgpl
# 构建全部依赖 (含 libass/FreeType/HarfBuzz/FriBidi)
cargo run -p xtask -- deps build --all --profile lgpl
# 查看依赖状态
cargo run -p xtask -- deps status
cargo build -p erika
cargo test --workspace
# macOS
export SAMPLE="/path/to/video.mp4"
cargo run -p macos_native_demo -- "$SAMPLE"
cargo run -p macos_native_demo -- --smoke-seconds 3 "$SAMPLE"
# Windows
cargo run -p windows_native_demo -- "%SAMPLE%"
Rust workspace: MPL-2.0
原生依赖通过 xtask 独立管理构建 profile 和许可证边界。
Rust
70.1%
Swift
8.6%
Kotlin
8.2%
C++
4.5%
Dart
4.4%
C
2.0%
Rust media player kernel
29
stars
397
commits
Rust
primary language
Sep 7, 2026
updated
「GOOD!我是Erika,是NipaPlay里继mdk、video player、libmpv、media kit之后的第五个播放器内核。」 「即便算上你,也只有四个播放器内核!」
NipaPlay 的自研播放内核。 Rust 实现,可嵌入,从解码到渲染一手包办。
名字取自《海猫鸣泣之时》的侦探 古戸ヱリカ。 而 NipaPlay 来自《寒蝉鸣泣之时》古手梨花的口癖「にぱー☆」——社区里大家都叫她「梨花」。 一个是台前的播放器,一个是幕后的引擎。同出一脉,互为表里。
宿主应用只需提供一个渲染表面并发送播放命令——解码、时序同步、音视频渲染、字幕、弹幕、音频输出均由 Erika 内部完成,不经过宿主的渲染管线。
erika.h 中的导出声明为准use erika::{Player, PlayerConfig, MediaRequest};
let player = Player::new(PlayerConfig::default())?;
player.open(MediaRequest::file("/path/to/video.mp4"))?;
player.play()?;
#include "erika.h"
ErikaPresenterHandle *presenter = erika_presenter_create();
erika_presenter_attach_metal_layer(presenter, (uint64_t)layer, w, h, scale);
erika_presenter_open(presenter, "/path/to/video.mp4");
erika_presenter_play(presenter);
// 每个显示帧回调:
ErikaPresenterStats stats;
erika_presenter_render_tick(presenter, host_time, &stats);
final player = ErikaPlayer();
await player.open('/path/to/video.mp4');
await player.play();
// 推荐:完整播放器 UI 在 macOS/iOS/tvOS 使用原生 window overlay / 挖空路径
ErikaWindowOverlayVideoView(player: player)
// 兼容/诊断:Flutter platform view 路径
ErikaVideoView(player: player)
erika_flutter is published on pub.dev
for macOS, iOS, tvOS, Windows, Android, and HarmonyOS/OpenHarmony. Add it to a
Flutter app with:
flutter pub add erika_flutter
The package downloads the matching verified native runtime during the platform build. Android downloads only the selected ABI archive; Linux and Web are not published targets yet.
The native ArkTS package erika is published on
OHPM for OpenHarmony arm64
applications (API 18+). Install it with:
ohpm install erika
See the OpenHarmony package guide for the
ErikaPlayer API and XComponent surface setup.
原生 macOS、iOS 和 tvOS 应用可通过 Swift Package Manager 使用
ErikaSwift。在 Xcode 的
Add Package Dependencies 中输入:
https://github.com/AimesSoft/ErikaSwift
SwiftPM 会自动下载对应的 Apple XCFramework,不需要安装 Rust、FFmpeg、 CocoaPods 或 Flutter。
Erika 提供两组 C ABI 入口,适配不同嵌入场景:
| 接口族 | 适用场景 | 渲染方式 |
|---|---|---|
ErikaHandle | 宿主自己管理渲染循环 | 宿主拉取帧数据 |
ErikaPresenterHandle | Erika 托管完整播放栈 | 宿主只需提供 surface 并驱动 render_tick |
头文件: crates/erika_capi/include/erika.h
| 平台 | 解码 | 渲染 | 音频 | 状态 |
|---|---|---|---|---|
| macOS 14+ | VideoToolbox | Metal | CoreAudio | 可用 |
| iOS 16+ | VideoToolbox | Metal | AudioQueue | 可用 |
| tvOS 13+ (Apple TV) | VideoToolbox | Metal | AudioQueue | 可用 |
| Windows 10+ | D3D11VA | Direct3D 11 | WASAPI | 可用 |
| Linux | — | wgpu (planned) | — | 规划中 |
| Android 8+ | MediaCodec / software | wgpu (Vulkan + GLES fallback) | AAudio | 可用 |
| HarmonyOS API 18+ | AVCodec(H.264/HEVC)/ 软解 | wgpu (Vulkan) + OHNativeBuffer 零拷贝导入 | OHAudio | 可用 |
crates/erika 核心播放库
crates/erika_capi C ABI 导出层
crates/erika_ffmpeg_sys FFmpeg 底层 bindings
packages/erika_flutter Flutter 插件 (macOS + iOS + tvOS + Windows + Android + HarmonyOS)
packages/erika_ohos OpenHarmony ArkTS / OHPM package
examples/ 验证与演示程序
xtask/ 原生依赖构建编排
docs/ 架构与嵌入文档
erika_capi 库下载与打包(英文)x86_64-pc-windows-msvc)aarch64-unknown-linux-ohos target# 构建 FFmpeg (LGPL profile)
cargo run -p xtask -- deps build --profile lgpl
# 构建全部依赖 (含 libass/FreeType/HarfBuzz/FriBidi)
cargo run -p xtask -- deps build --all --profile lgpl
# 查看依赖状态
cargo run -p xtask -- deps status
cargo build -p erika
cargo test --workspace
# macOS
export SAMPLE="/path/to/video.mp4"
cargo run -p macos_native_demo -- "$SAMPLE"
cargo run -p macos_native_demo -- --smoke-seconds 3 "$SAMPLE"
# Windows
cargo run -p windows_native_demo -- "%SAMPLE%"
Rust workspace: MPL-2.0
原生依赖通过 xtask 独立管理构建 profile 和许可证边界。
Rust
70.1%
Swift
8.6%
Kotlin
8.2%
C++
4.5%
Dart
4.4%
C
2.0%