Baka 中文文档 下载 App

media_kit (libmpv)——Baka 的硬核播放底层

什么是 media_kit

media_kit 是一个 Flutter 生态中的开源项目,它将工业级视频播放器 libmpv 封装成 Flutter 可直接调用的 API。Baka 就是基于 media_kit 来实现播放功能的。

之所以选 libmpv 而不是直接用 Android 原生的 ExoPlayer 或 iOS 的 AVPlayer,原因很简单:mpv 的跨平台一致性和功能完备性远超原生播放器。

libmpv 的地位

libmpv 是 mpv 播放器的核心库,几乎是所有"高级"视频播放器的底层选择:

它的地位类似于图片处理领域的 ImageMagick——你几乎找不到它不支持的视频格式。

media_kit 的封装价值

直接用 libmpv 需要处理 C/C++ 与 Dart 的绑定、各平台编译产物的分发、渲染表面的适配等问题。media_kit 帮开发者解决了这些:

原生 libmpvmedia_kit 封装后
C API,需手动管理内存Dart 异步 API,自动管理
各平台独立编译配置统一的 pubspec 依赖
渲染表面需自行集成提供 VideoController 和 Video 组件
错误码需自行解析抛出 Dart 异常

Baka 对 media_kit 的定制

Baka 并没有直接使用 media_kit 默认配置,而是做了以下定制:

性能表现

mpv 引擎在移动端的性能表现取决于设备硬件:

与 ExoPlayer 的对比

ExoPlayer 是 Android 原生推荐的播放器,但在动漫播放器场景下 mpv 更有优势:

维度ExoPlayerlibmpv (media_kit)
格式支持以系统解码器为准自编译的 ffmpeg,全覆盖
HEVC 10bit依赖硬件支持软件解码也能跑
ASS 字幕基本支持完整支持(包括复杂特效)
着色器链需自定义 OpenGL原生支持 GLSL 着色器
跨平台一致性各平台差异大行为一致