Skip to content
LetMeDecayPublic

About

A beautiful media player for android, based on mpv-android and built with Jetpack Compose. Forked from mpvKt

Resources

Stars

1 star

Watchers

0 watching

Forks

 
 

Repository files navigation

banner

mpvExtended

GitHub release (latest SemVer) GitHub all releases

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.

Changes in this fork

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.

Installation

Stable Release

Download the latest stable version from the GitHub releases page.

Download Release

Or you can get the stable releases here

Get it at IzzyOnDroid

Preview Builds

For testing purposes only

Download Preview Builds


Showcase


Building

Prerequisites

  • JDK 17
  • Android SDK with build tools 34.0.0+
  • Git (for version information in builds)

APK Variants

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

Releases

Setting Up Release Signing

To enable automatic signing for release builds in GitHub Actions, you need to configure the following secrets in your GitHub repository:

  1. Navigate to your repository on GitHub
  2. Go to Settings → Secrets and variables → Actions
  3. 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)

Encoding Your Keystore

To encode your keystore file to base64:

Linux/macOS:

base64 -i your-keystore.jks | tr -d '\n' > keystore.txt

Windows (PowerShell):

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

Copy the contents of keystore.txt and paste it as the value for the SIGNING_KEYSTORE secret.

Creating a Release

  1. Update versionCode and versionName in app/build.gradle.kts
  2. Commit the changes
  3. Create and push a tag:
    git tag -a v1.0.0 -m "Release version 1.0.0"
    git push origin v1.0.0
  4. GitHub Actions will automatically build, sign, and create a draft release

Creating a Preview Release

  1. 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
  2. GitHub Actions will create a pre-release automatically

Acknowledgments


Support the Project Heart with Ribbon

If you find mpvExtended useful, consider supporting the development:

UPI


Star History Star

Star History Chart

About

A beautiful media player for android, based on mpv-android and built with Jetpack Compose. Forked from mpvKt

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages