Как mpv получил современный Android интерфейс на Jetpack Compose

Если вы когда-нибудь пробовали смотреть тяжелые видеофайлы со сложными субтитрами на Android, то наверняка натыкались на mpv-android. Движок у него всеядный и быстрый, так как под капотом крутится проверенная временем библиотека libmpv. Но вот интерфейс классического клиента долгое время оставался спартанским, будто застрявшим во временах Android 7.
Недавно на GitHub набрал популярность форк mpvEx (mpvExtended), разработчик которого взял за основу кодовую базу проектов mpvKt и mpv-android, переписал интерфейс на Jetpack Compose с Material 3 Expressive и добавил пачку нужных функций для повседневного просмотра.
Зачем еще один форк mpv
Оригинальный плеер хорош минимализмом, но мобильным пользователям часто не хватает базового комфорта. В mpvEx автор сфокусировался на трех вещах: сохранение возможностей рендеринга libmpv, осовременивание UI и нормальная работа с домашними серверами.
В приложении нет рекламы, трекеров и лишних разрешений в манифесте. Код полностью открыт под лицензией Apache 2.0.
Чем интересен плеер в работе
Сетевые протоколы из коробки
Тянуть видеофайлы по локальной сети через сторонние файловые менеджеры неудобно. В mpvEx встроили поддержку протоколов SMB, FTP и WebDAV. Вы можете подключить домашний NAS или диск на роутере прямо в плеере и открывать ролики без предварительного скачивания во внутреннюю память телефона.
Полноценная покадровая навигация
Для тех, кто разбирает видеоряд по кадрам или ищет конкретный момент в записи, сделан отдельный интерфейс покадровой перемотки. Нажимаете кнопку и шагаете вперед или назад без задержек буферизации.
Гибкая работа с медиа
Помимо привычного режима «картинка в картинке» (PiP) и фонового воспроизведения звука с выключенным экраном, плеер умеет:
- Подключать внешние дорожки субтитров и аудиофайлы
- Масштабировать видео жестом pinch-to-zoom
- Переключать вид каталогов между деревом папок и плоским списком
- Управлять плейлистами и разметкой по главам (chapters)
Что под капотом
Проект написан на Kotlin с активным использованием Jetpack Compose. Связка с нативным слоем libmpv и библиотеками FFmpeg реализована через JNI.
Сборка приложения требует JDK 17 и Android SDK с build tools версии 34.0.0 или новее. В репозитории настроен пайплайн GitHub Actions, который автоматически собирает APK под разные архитектуры:
arm64-v8aдля современных смартфоновarmeabi-v7aдля старых 32-битных чиповx86иx86_64для эмуляторов и редких устройств на Inteluniversalуниверсальный пакет со всеми библиотеками сразу
Если захотите собрать приложение из исходников с собственной подписью, в репозитории описана процедура проброса ключей через GitHub Secrets:
# Для Linux и macOS кодируем keystore в base64
base64 -i your-keystore.jks | tr -d '\n' > keystore.txt
В PowerShell на Windows для этого используется встроенный метод .NET:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("your-keystore.jks")) | Out-File -FilePath keystore.txt -NoNewline
Текущее состояние и выводы
Проект активно развивается: у репозитория уже более 2400 звезд, хотя в трекере висит около 250 открытых issue. Разработчик честно предупреждает, что в нестандартных сценариях могут встречаться баги.
Если стандартные плееры вроде VLC вам кажутся перегруженными, а чистый mpv-android отталкивает устаревшим оформлением, mpvEx станет отличной альтернативой. Попробовать готовые сборки можно со страницы релизов на GitHub или через каталог IzzyOnDroid. Для Android-разработчиков репозиторий также послужит хорошим примером того, как обернуть тяжелую C/C++ библиотеку в современный Compose UI.
