mpvExtended is a fork of mpv-android, built on the libmpv library. It aims to combine the powerful features of mpv with an easy to use interface and additional features.
- Simpler and Easier to Use UI
- Material3 Expressive Design
- Advanced Configuration and Scripting
- Enhanced Playback Features
- Picture-in-Picture (PiP)
- Background Playback
- High-Quality Rendering
- Network Streaming
- File Management
- Completely free and open source and without any ads or excessive permissions
- Media picker with tree and folder view modes
- External Subtitle support
- Zoom gesture
- External Audio support
- Search Functionality
- SMB/FTP/WebDAV support
- Custom Playlist management support
This project is still in development and is expected to have bugs. Please report any bugs you find in the Issues section.
This fork focuses on networked playback (WebDAV/SMB/FTP) and player startup:
- WebDAV playback reliability: fixed black screens caused by a surface callback missed when native initialisation is deferred, preserved upstream HTTP status/length/range semantics, retried transient 5xx and transport failures once, and surfaced stalled loads instead of spinning forever.
- Faster directory browsing: listings drop the collection entry by path instead of assuming it is first, sorting is derived without feeding back into the list, starting playback cancels competing metadata probes, and the WebDAV connection is warmed before the player opens.
- Cheaper metadata: duration/resolution are parsed directly from MP4/Matroska headers (bounded head/tail range reads, with the platform retriever as fallback); thumbnail fallbacks batch their timestamps and the on-disk preview cache is budgeted.
- Startup: player configuration snapshots are reused by input fingerprint and bundled assets are hard-linked into them, removing a ~15MB copy/hash on every launch.
- Player robustness: serialized command queue for loads/seeks/pause, ordered frame capture, external audio/subtitle ownership, typed tuning controls and stable track identities.
- Cleanup: removed the unreachable streaming ContentProvider, the unused next-item prefetch pipeline and other dead helpers.
Download the latest stable version from the GitHub releases page.
Or you can get the stable releases here
For testing purposes only
- JDK 17
- Android SDK with build tools 34.0.0+
- Git (for version information in builds)
The app generates multiple APK variants for different CPU architectures:
- universal: Works on all devices (larger size)
- arm64-v8a: Modern 64-bit ARM devices (recommended for most users)
- armeabi-v7a: Older 32-bit ARM devices
- x86: Intel/AMD 32-bit devices
- x86_64: Intel/AMD 64-bit devices
To enable automatic signing for release builds in GitHub Actions, you need to configure the following secrets in your GitHub repository:
- Navigate to your repository on GitHub
- Go to Settings → Secrets and variables → Actions
- Add the following repository secrets:
| Secret Name | Description |
|---|---|
SIGNING_KEYSTORE |
Base64-encoded keystore file (.jks or .keystore) |
SIGNING_KEY_ALIAS |
The alias name used when creating the keystore |
SIGNING_STORE_PASSWORD |
Password for the keystore file |
KEY_PASSWORD |
Password for the key (can be same as store password) |
To encode your keystore file to base64:
Linux/macOS:
base64 -i your-keystore.jks | tr -d '\n' > keystore.txtWindows (PowerShell):
[Convert]::ToBase64String([IO.File]::ReadAllBytes("your-keystore.jks")) | Out-File -FilePath keystore.txt -NoNewlineCopy the contents of keystore.txt and paste it as the value for the SIGNING_KEYSTORE secret.
- Update
versionCodeandversionNameinapp/build.gradle.kts - Commit the changes
- Create and push a tag:
git tag -a v1.0.0 -m "Release version 1.0.0" git push origin v1.0.0 - GitHub Actions will automatically build, sign, and create a draft release
- Create and push a preview tag:
git tag -a v1.0.0-preview.1 -m "Preview release" git push origin v1.0.0-preview.1 - GitHub Actions will create a pre-release automatically
If you find mpvExtended useful, consider supporting the development:








