# mpv-android: a libmpv player for Android, and what it does not do

> mpv-android wraps libmpv in an Android app with hardware decoding, gesture controls and libass subtitles. It is not an AAR, and Android TV builds only ship through F-Droid or a manual APK.

**mpv-android/mpv-android** — Video player for Android based on libmpv ↦ #mpv-android @ irc.libera.chat

- Repository: https://github.com/mpv-android/mpv-android
- Stars: 3,601 · Forks: 499
- Language: Kotlin
- License: MIT
- Published: 2026-09-23 · Updated: 2026-09-23 · Language: en
- Canonical page: https://hysenlabs.com/projects/mpv-android-mpv-android

## What mpv-android is, and the problem it addresses

Android's stock media stack handles common codecs and container formats. It is less accommodating when a file uses an unusual subtitle format, a scaler or debanding setting you want to control, or a network stream you would rather open by URL than add to a library. mpv-android exists to put libmpv, the playback core behind the desktop mpv player, in front of Android users as a full application, and the feature list in the README reads like a direct answer to those gaps: hardware and software video decoding, gesture-based seeking and volume or brightness control, libass support for styled subtitles, secondary or dual subtitle support, and high-quality rendering with advanced settings such as scalers, debanding and interpolation.

The intended audience is the person who already knows what libass or debanding means, or who is willing to learn. This is not a ten-foot interface for casual viewing, and it is not a media library manager. The README describes a player, plus background playback, Picture-in-Picture and keyboard input. If you want something that catalogs a collection, this is the wrong shape of tool.

One sentence in the README is easy to miss and matters more than the feature list. mpv-android is not a library or module (AAR) you can import into your app. Developers who arrive hoping to drop libmpv into their own product are told to use the code as inspiration instead, with MPVLib.kt, BaseMPVView.kt and the native code under app/src/main/jni/ named as the important parts. That is a deliberate boundary, and it shapes everything about how the project is consumed.

## How libmpv is wired into an Android app

The repository layout tells most of the story. The app module sits at app/, with Kotlin sources under app/src/main/java/is/xyz/mpv/ and native code under app/src/main/jni/. The build is Gradle, driven by build.gradle, settings.gradle and the gradlew wrapper, with a separate buildscripts/ directory that the README points to for source builds.

The README names three pieces as the important ones for anyone studying the integration. MPVLib.kt is the Kotlin side of the libmpv binding. BaseMPVView.kt is the view layer that a player surface builds on. The native code under app/src/main/jni/ is where the compiled libmpv and the JNI glue live, and the README states that native code is built by the scripts in buildscripts/. In practice that means the Kotlin application layer never talks to libmpv directly: it goes through MPVLib, and MPVLib goes through JNI into the native library.

That split has consequences worth naming. Anything you want to change in the playback core is a native build, not a Gradle dependency bump. The app module is the only consumer the repository ships, and there is no published AAR to depend on. The buildscripts/ directory contains its own README, which the top-level README directs you to for building from source, and the project also maintains documentation at mpv-android.github.io/mpv-android. Neither of those is reproduced here, and the top-level README does not describe the build steps itself.

## Installing mpv-android and opening a stream

The README gives three routes to a build. The Releases section on GitHub, Google Play under the package id is.xyz.mpv, and F-Droid under the same package id. If you are on Android TV, only two of those work: the README states that Android TV is supported but available only on F-Droid or by installing the APK manually. That rules out the Play listing for TV devices.

Once installed, the README's own description of network playback is the "Open URL" function. There is no command line here, so the first real use is a URL entered in that dialog, not a shell invocation. The README does not document a config file path, a settings file format, or any environment variable for the Android app. The related search phrase mpv-android config has no answer in the README, and the mpv desktop configuration model, where an mpv.conf file drives options, is not described for this app. Settings that the README does mention are presented as app features rather than config keys: scalers, debanding and interpolation fall under advanced settings, and gesture-based seeking, volume and brightness control are the interaction model.

For a source build, the README does not list the commands inline. It says to look at the README inside the buildscripts directory. That file is not part of what the top-level README reproduces, so the exact Gradle invocation is not something this article can state.

What a reader should expect after installing is a player, not a setup wizard. The README's feature list is the whole of the documented surface.

## Where mpv-android is the wrong pick

The clearest limitation is architectural and stated outright: there is no AAR. If your goal is to embed libmpv playback inside an existing Android application, mpv-android is not a dependency you can add. The README's answer is to read MPVLib.kt, BaseMPVView.kt and the native code as reference material and build your own integration. That is a substantial amount of work, and the top-level README does not pretend otherwise.

Android TV is the second boundary. Support exists, but distribution does not match it. On Google Play the app is not offered for TV, so a TV user has to go through F-Droid or sideload an APK. For a household that relies on the Play Store for updates, that is a real friction point.

The third gap is documentation for configuration. The README lists advanced rendering options as features but does not explain how to set them, where they persist, or how to reproduce a desktop mpv setup. Someone who expects the same options-file workflow they use on the desktop will not find it described in the README. The project does maintain a documentation site at mpv-android.github.io/mpv-android, and the README links to it, but the README itself does not carry those details.

Finally, consider what the project is not. There is no media library, no scraping, no playback resume across a collection described in the README. If you want a catalog and a poster wall, this player is the wrong layer.

## mpv-android against VLC and MX Player

The honest comparison starts with what each project is built on. mpv-android is a thin Android front end over libmpv, the same playback core as the desktop mpv player. That is the whole design premise, and it is why the feature list reads the way it does: libass subtitles, dual subtitles, scalers, debanding, interpolation. Those are mpv's capabilities surfaced through a touch interface.

VLC for Android comes from a different lineage. It is built around its own playback stack and its own format support, with a long history on desktop and a broad device footprint. The practical difference is not which one plays more files, since both aim at broad format coverage. It is where the tuning knobs live and how closely the Android app tracks the desktop player. With mpv-android the README describes the desktop player's rendering options as app features, so the mental model transfers. With VLC the Android app is its own product with its own settings surface.

MX Player is a different kind of comparison again. It is a consumer-oriented player with a polished interface and a distribution model built around the Play Store, and it is what most people mean when they say "Android video player." mpv-android does not compete on that ground. It competes on control: subtitle rendering, scaling and decoding choices that a casual viewer will never open.

The related searches include mpv android fork, which reflects a real property of the project. Because the source is public and the build is a Gradle project with a buildscripts directory, forks and repackaged builds exist. The README does not endorse any of them, and the only download locations it names are the Releases section, Google Play and F-Droid.

## Maintenance, upgrades and the MIT licence

The repository is not archived, and the last push was on 2026-09-17. Recent releases follow a date-stamped naming pattern: 2026-09-17, 2026-08-11 and 2026-04-25. The gap between the April and August builds is roughly three and a half months, and the gap between August and September is about five weeks. There is no published release cadence in the README, so anyone depending on a predictable schedule should read the Releases page rather than assume one.

Upgrade cost depends on how you installed it. Through Google Play or F-Droid, updates arrive through the store, and the package id is.xyz.mpv stays the same. Through a manually installed APK, which is the only route the README describes for Android TV besides F-Droid, you are responsible for fetching each new build from the Releases section. Nothing in the README describes an in-app updater or a rollback path, so downgrading is not a documented operation.

For source builders, the cost is a native toolchain. The README states that native code is built by the scripts in buildscripts/, and that the build instructions live in buildscripts/README.md. A Gradle sync alone will not produce a working player, because the libmpv side is compiled separately. Anyone planning to track master should budget for that.

The licence is MIT. That is permissive: it allows use, modification and redistribution with the licence and copyright notice preserved. This article is not legal advice, and MIT says nothing about the licences of libmpv or the other components the native build pulls in, which the README does not cover. If you plan to redistribute a build, the third-party obligations are the part to check, not the MIT text itself.

## Conclusion

Adopt mpv-android if you want libmpv's rendering and subtitle pipeline on a phone or tablet and you accept that the README documents no configuration path and that Android TV builds exist only on F-Droid or as a manually installed APK. Do not adopt it if you need an importable AAR, since the README states the project is not a library or module you can pull into your app, and points you at MPVLib.kt, BaseMPVView.kt and the native code under app/src/main/jni/ as inspiration instead. Verify first that the release asset you intend to install is the one you want, because the README points to the Releases section, Google Play and F-Droid, and the TV note applies only to the last two of those three.

## FAQ

### Does mpv-android work on Android?

Yes. mpv-android is an Android application built on libmpv, and the README lists hardware and software video decoding, gesture controls, libass subtitles, network stream playback via "Open URL", background playback, Picture-in-Picture and keyboard input.

### How do I use mpv-android?

Install it from the Releases section, Google Play or F-Droid under the package id is.xyz.mpv, then open a network stream through the "Open URL" function. The README does not document a config file or command line for the Android app.

### What is mpv-android?

It is a video player for Android based on libmpv, the playback core behind the desktop mpv player. The README describes it as an application, not a library or module (AAR) you can import into your app.

### Is mpv-android safe to use?

The README does not make any security claims. The only download locations it names are the Releases section on GitHub, Google Play and F-Droid, all under the package id is.xyz.mpv, so those are the sources the project itself points to.

### How does mpv-android compare with VLC on Android?

mpv-android is a front end over libmpv, the desktop mpv playback core, so its feature list maps to mpv's rendering and subtitle options. VLC for Android is built on its own playback stack and settings surface. The README does not include benchmarks or format-support comparisons.

### What is the best mpv configuration for Android?

The README does not answer this. It describes advanced settings such as scalers, debanding and interpolation as app features, but it does not document a configuration file, its location or its format for the Android app.

## Sources

- [Issues](https://github.com/mpv-android/mpv-android/issues)
- [License: MIT](https://github.com/mpv-android/mpv-android/blob/master/LICENSE)
- [mpv-android/mpv-android on GitHub](https://github.com/mpv-android/mpv-android)
- [README](https://github.com/mpv-android/mpv-android/blob/master/README.md)
- [Releases](https://github.com/mpv-android/mpv-android/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/mpv-android-mpv-android
