Open-source project
moneytoo/Player avatar
moneytoo/Player

Just (Video) Player: an ExoPlayer-based Android video player with ffmpeg audio decoding

▶ Simple and lightweight, yet polished and powerful Android video player based on ExoPlayer

2,705 stars287 forksJavaUnlicense

At a glance

What is it?
Just (Video) Player is a Media3/ExoPlayer Android app that adds the ffmpeg extension for formats such as AC-3, DTS and TrueHD. It is a good fit for local files and Android TV, less so if you need a library manager or broad subtitle styling.
Who is it for?
Adopt Just (Video) Player if you play local video files on Android phones or Android TV and need audio formats that stock decoders often miss, such as AC-3, E-AC-3, DTS, DTS-HD and TrueHD. Do not adopt it if you want a media library, a streaming catalog, or full SSA/ASS subtitle styling; the README links to an ExoPlayer issue describing that styling as limited.
Can I use it commercially?
Yes. Unlicense is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 7 days ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 24, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The gap Just (Video) Player fills: ExoPlayer without the missing audio codecs

ExoPlayer, now developed as Media3, is a playback library rather than an app. The README says the author could not find another nice ExoPlayer-based video player, so he built one. That framing matters: this is not an attempt to replace VLC or MX Player on features. It is an ExoPlayer front end that enables the ffmpeg extension with all of its audio formats, which is why the format list includes AC-3, E-AC-3, DTS, DTS-HD, TrueHD, IAMF and MPEG-H. Many Android devices ship without decoders for the first four, so a file with a DTS or TrueHD track plays video but stays silent in players that rely on platform codecs alone.

The audience is narrow and specific. It is people with local files: rips, camera footage, downloaded episodes, files on a NAS or SD card. It is also Android TV and set-top box owners, because the README calls out auto frame rate matching and tunneled playback, both of which matter on a television. The README also states that audio stays in sync with video when using Bluetooth earphones or a speaker, and says the author could not find another ExoPlayer-based video player that handled this well. That is a personal claim from the project, not a measured comparison.

What it is not: a media center. There is no library scanning, no metadata scraping, no watch history across a catalog. You open a file through a chooser and it plays. The README mentions an app shortcut for direct access to the file chooser on Android 7.1 and later, which tells you the intended workflow is file-first, not library-first.

Inside the app: Media3, the ffmpeg extension, and a settings screen behind a long press

The repository layout shows the shape of the project: app/ holds the Android application, android-file-chooser/ is a separate module for picking files, and doubletapplayerview/ is a view component for double-tap seeking. The build is Gradle, with build.gradle, settings.gradle, gradle.properties and the gradlew wrapper at the top level. The README states the app is based on Media3, and the badge in the README pins Media3 at 1.11.1. Media3 is the current name for what used to be ExoPlayer, and the topics list both exoplayer and exoplayer2 alongside media3, which reflects that history.

Playback itself is ExoPlayer's pipeline: the container is demuxed, tracks are selected, and decoding is handed to either the device decoders or the app's bundled decoders. The README exposes this as a setting called decoder priority, where you prefer device or app decoders. That is a real trade-off knob. Device decoders are usually more power-efficient and may be required for HDR output; app decoders are more predictable across devices. The README does not describe how the two interact when both can handle a stream, so treat the setting as something to test per device rather than a documented rule.

Most of the interesting configuration is hidden. The README says advanced features are in settings, reached by long-pressing the gear icon, or alternatively from the App info screen. Inside are default audio tracks (specific language, prefer device language, or media file defaults), file access mode (Storage Access Framework, MediaStore, or legacy file access), auto frame rate matching, tunneled playback, playback of Dolby Vision profile 7 as HDR HEVC, auto picture-in-picture, skip silence and a repeat toggle. The README notes that tunneled playback can improve playback of 4K/HDR content on Android TV. It does not promise that it will on your box.

Installing Just (Video) Player and playing a first file

The README lists four distribution channels: Google Play, F-Droid, Accrescent and Obtainium. The package name is com.brouken.player, which is what you search for on Google Play and what appears in the F-Droid URL. There is no source build instruction in the README, so if you want to compile it yourself you are working from the Gradle files in the repository rather than from documented steps.

One permission is worth granting deliberately. The README explains that when the system file chooser opens, it uses the current system orientation, even if the player sets its own. Granting WRITE_SETTINGS lets the app temporarily enable auto-rotate to work around this. The README gives the exact command:

bash
adb shell pm grant com.brouken.player android.permission.WRITE_SETTINGS

The README says the same permission can be granted from the App info screen instead. After that, open a file through the chooser, or use the app shortcut for the file chooser on Android 7.1 and later. What you should see is the video starting without an intermediate library screen. If a file has multiple audio tracks, use the audio/subtitle track selection in the player, and check the default audio track settings if the wrong language keeps coming up.

Where Just (Video) Player falls short

Subtitle styling is the clearest limitation. The README lists SSA/ASS support but links to ExoPlayer issue 8435, labelled in the README itself as limited styling. If you watch anime or foreign films where the subtitle script carries positioning, fonts and karaoke effects, this player is not the tool for that job. The format is accepted; the presentation is not the full renderer that desktop players provide.

HDR support is conditional on hardware. The README states HDR10+ and Dolby Vision playback on compatible or supported hardware. That phrasing puts the burden on your device, not the app. The same applies to AC-4 audio, which the README says is supported on devices providing such a system decoder, naming Samsung Galaxy A, S and Z series running Android 11 or later as an example. There is no software fallback described for AC-4.

AVI is marked in the README with a construction symbol, which signals work in progress rather than a finished container. Do not plan on it. And there is no documented rollback path: the README does not describe downgrading to an earlier release, so if a new version misbehaves on your device you are left to find an older APK yourself. The app also has no library, so a folder of a hundred episodes is a folder of a hundred file picks unless your file manager hands the file to the player directly.

How it compares with VLC for Android

VLC for Android is the obvious alternative, and the difference is architectural. VLC ships its own decoding stack, including libavcodec, and its own rendering and subtitle engines, so it does not depend on ExoPlayer, Media3, or the device's decoder list for format coverage. That is why VLC handles SSA/ASS styling and unusual containers more completely, and why it behaves similarly across devices.

Just (Video) Player takes the opposite approach. It sits on Media3 and adds the ffmpeg extension for audio, which means it inherits ExoPlayer's track selection, tunneling, frame rate matching and Media Session integration, and it inherits ExoPlayer's limits too, including the subtitle styling issue the README links to. The practical consequence: on Android TV, where tunneling and refresh rate switching matter, the ExoPlayer route is the one designed around those platform features. Where subtitle rendering or container breadth matters more than platform integration, VLC's self-contained stack is the better match. Neither choice is universal; the deciding factor is whether you care more about Android TV playback behaviour or about rendering fidelity for complex subtitles.

Maintenance, upgrades and the Unlicense

The repository is not archived, and the last push was on 2026-09-22. Releases are frequent and small-numbered: v0.215 on 2026-07-22, v0.216 on 2026-08-08, and v0.217 on 2026-09-11. That cadence suggests incremental fixes rather than long release cycles, and it means an upgrade is usually a small step rather than a migration. The main upgrade cost is not the app itself but the Media3 version underneath it; the README pins Media3 1.11.1, and when that dependency moves, playback behaviour can shift in ways the app's own release notes may not spell out. Nothing in the README documents a downgrade procedure.

The licence is the Unlicense. That is a public-domain dedication rather than a permissive licence with conditions: it places the work in the public domain and, as a fallback, grants a broad licence with no conditions. For most people this is the least restrictive option available and removes attribution requirements, but it also means there is no warranty and no licence steward to appeal to. If your organisation has a policy that requires an explicit patent grant or a named copyright holder, the Unlicense text is short and you should read it before assuming it satisfies that policy. This is a description of the licence, not legal advice.

Editorial conclusion

Adopt Just (Video) Player if you play local video files on Android phones or Android TV and need audio formats that stock decoders often miss, such as AC-3, E-AC-3, DTS, DTS-HD and TrueHD. Do not adopt it if you want a media library, a streaming catalog, or full SSA/ASS subtitle styling; the README links to an ExoPlayer issue describing that styling as limited. Before relying on it, verify on your own hardware that HDR10+ or Dolby Vision playback works, since HDR depends on compatible hardware, and check whether your device exposes an AC-4 system decoder if you need AC-4 audio.

Frequently asked questions

How do I install Just (Video) Player on a Fire TV Stick?

The README does not mention Fire TV or Fire OS specifically. It lists Google Play, F-Droid, Accrescent and Obtainium as download channels, and states the app is compatible with Android 6+ and Android TV. Anything beyond those channels is not documented.

Does Just (Video) Player support DTS and TrueHD audio?

Yes. The README states the app uses ExoPlayer's ffmpeg extension with all its audio formats enabled, and the supported audio list includes AC-3, E-AC-3, DTS, DTS-HD and TrueHD.

Why do SSA/ASS subtitles look wrong in Just (Video) Player?

The README lists SSA/ASS support but links to ExoPlayer issue 8435 and describes the styling as limited, so full positioning and effect rendering is not available.

Which Android versions does Just (Video) Player require?

The README states it is compatible with Android 6+ and Android TV. Some features need newer versions: pinch to zoom requires Android 7+, picture-in-picture requires Android 8+, and resizable PiP requires Android 11+.

How do I open the advanced settings in Just (Video) Player?

The README says to long press the gear icon. It notes you can also reach the same settings from the App info screen.

Official sources

  1. License: Unlicense
  2. moneytoo/Player on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/moneytoo-player.svg)](https://hysenlabs.com/projects/moneytoo-player)