>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Kotlin

mpv 如何通过 Jetpack Compose 获得现代 Android 界面

banner

如果你曾在 Android 上尝试观看体积较大的视频文件配合复杂字幕,你可能接触过 mpv-android。它的引擎功能丰富且速度快,底层运行着久经考验的 libmpv 库。但这个经典客户端的界面长期以来都比较简陋,仿佛停留在 Android 7 时代。

最近,一个名为 mpvEx(mpvExtended)的分支在 GitHub 上获得了关注。开发者以 mpvKt 和 mpv-android 项目的代码库为基础,使用 Jetpack Compose 和 Material 3 Expressive 重写了界面,并添加了大量日常观看的实用功能。

为什么还要另一个 mpv 分支

原版播放器在极简主义方面表现出色,但移动端用户往往缺乏基本的便利性。在 mpvEx 中,作者专注于三个方面:保留 libmpv 的渲染能力、实现 UI 现代化,以及完善对家庭服务器的支持。

该应用没有广告、追踪器或在清单中声明不必要的权限。代码完全开源,采用 Apache 2.0 许可证。

这款播放器在实际使用中有哪些亮点

开箱即用的网络协议支持

通过第三方文件管理器拉取局域网中的视频文件很不方便。mpvEx 内置支持 SMB、FTP 和 WebDAV 协议。你可以直接在播放器中连接家庭 NAS 或路由器硬盘,无需先将视频下载到手机内部存储。

完整的逐帧导航功能

对于需要逐帧分析视频或在录像中寻找特定时刻的用户,提供了专门的逐帧导航界面。只需按下按钮即可向前或向后逐帧切换,没有缓冲延迟。

灵活的媒体处理

除了熟悉的画中画(PiP)模式和屏幕关闭时的后台音频播放外,该播放器还能:

  • 挂载外部字幕轨道和音频文件
  • 通过双指缩放手势缩放视频
  • 在文件夹树状视图和平铺列表之间切换目录视图
  • 管理播放列表和章节导航

底层技术架构

该项目使用 Kotlin 编写,并大量使用 Jetpack Compose。通过 JNI 实现了与原生层 libmpv 和 FFmpeg 库的集成。

构建该应用需要 JDK 17 和 Android SDK(build tools 版本 34.0.0 或更高)。仓库中配置了 GitHub Actions 流水线,可自动为不同架构构建 APK:

  • arm64-v8a 适用于现代智能手机
  • armeabi-v7a 适用于老旧的 32 位芯片
  • x86x86_64 适用于模拟器和罕见的 Intel 设备
  • universal 通用包,包含所有库

如果你想使用自己的签名从源码构建应用,仓库中描述了通过 GitHub Secrets 传递密钥的流程:

# Для Linux и macOS кодируем keystore в base64
base64 -i your-keystore.jks | tr -d '\n' > keystore.txt

在 Windows PowerShell 中,这使用了内置的 .NET 方法:

[Convert]::ToBase64String([IO.File]::ReadAllBytes("your-keystore.jks")) | Out-File -FilePath keystore.txt -NoNewline

当前状态与总结

该项目正在积极开发中:仓库已获得超过 2400 颗星,但跟踪器中仍有约 250 个未解决的问题。开发者坦诚地警告说,在非标准场景下可能会出现 bug。

如果你觉得 VLC 等标准播放器过于臃肿,而简陋的 mpv-android 又让你望而却步,mpvEx 将是一个绝佳的替代选择。你可以从 GitHub 的 releases 页面或通过 IzzyOnDroid 目录下载现成的构建版本。对于 Android 开发者来说,该仓库也是一个很好的示例,展示了如何用现代 Compose UI 封装重型 C/C++ 库。

相关项目