Convert Figma logo to code with AI

moneytoo logoPlayer

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

1,688
185
1,688
63

Top Related Projects

31,338

A libre lightweight streaming front-end for Android.

21,714

This project is deprecated and stale. The latest ExoPlayer code is available in https://github.com/androidx/media

#mpv-android @ libera.chat

VLC for Android, Android TV and ChromeOS

Android Client for Jellyfin

3,326

NOVA opeN sOurce Video plAyer: main repository to build them all

Quick Overview

Player is a minimalist, open-source video player for Android. It focuses on providing a simple and efficient user experience while supporting a wide range of video formats and features like picture-in-picture mode, gestures for playback control, and subtitle support.

Pros

  • Lightweight and fast performance
  • Supports a wide range of video formats
  • Includes advanced features like picture-in-picture and gesture controls
  • Open-source and actively maintained

Cons

  • Limited customization options compared to more feature-rich players
  • May lack some advanced audio features found in other media players
  • User interface might be too minimalistic for some users

Getting Started

To use Player on your Android device:

  1. Download the latest APK from the releases page.
  2. Enable installation from unknown sources in your device settings.
  3. Install the APK on your Android device.
  4. Open the Player app and grant necessary permissions.
  5. Select a video file to start playback.

For developers who want to contribute or customize the player:

  1. Clone the repository:
    git clone https://github.com/moneytoo/Player.git
    
  2. Open the project in Android Studio.
  3. Build and run the project on your Android device or emulator.

Competitor Comparisons

31,338

A libre lightweight streaming front-end for Android.

Pros of NewPipe

  • More comprehensive feature set, including video downloading and background playback
  • Supports multiple streaming platforms beyond YouTube
  • Larger and more active community, with frequent updates and bug fixes

Cons of NewPipe

  • Larger app size and potentially higher resource usage
  • More complex user interface due to additional features
  • May require more frequent updates to maintain compatibility with streaming services

Code Comparison

NewPipe (Java):

@Override
protected void onResume() {
    super.onResume();
    if (wasSearchFocused && searchEditText != null) {
        searchEditText.requestFocus();
    }
}

Player (Kotlin):

override fun onResume() {
    super.onResume()
    if (playerView.player == null) initializePlayer()
}

Both repositories use different programming languages, with NewPipe primarily using Java and Player using Kotlin. NewPipe's codebase is more extensive due to its broader feature set, while Player focuses on a simpler, lightweight video playback experience. NewPipe's code often includes more complex logic to handle various streaming platforms and features, whereas Player's code is more streamlined for basic video playback functionality.

21,714

This project is deprecated and stale. The latest ExoPlayer code is available in https://github.com/androidx/media

Pros of ExoPlayer

  • More comprehensive and feature-rich, supporting a wide range of media formats and streaming protocols
  • Backed by Google, ensuring regular updates and extensive documentation
  • Large community and ecosystem of extensions and plugins

Cons of ExoPlayer

  • Larger library size and potentially higher resource usage
  • Steeper learning curve due to its extensive API and features
  • May be overkill for simple playback needs

Code Comparison

ExoPlayer initialization:

val player = SimpleExoPlayer.Builder(context).build()
player.setMediaItem(MediaItem.fromUri(videoUri))
player.prepare()
player.play()

Player initialization:

val player = Player(context)
player.setSource(videoUri)
player.start()

Summary

ExoPlayer is a powerful and versatile media player library with extensive features and support, making it suitable for complex media playback scenarios. Player, on the other hand, is a lightweight alternative that focuses on simplicity and ease of use for basic video playback needs. ExoPlayer offers more customization options and advanced features but comes with a larger footprint and steeper learning curve. Player provides a more straightforward API and smaller library size, making it ideal for projects with simpler requirements. The choice between the two depends on the specific needs of your project and the level of complexity you're willing to manage.

#mpv-android @ libera.chat

Pros of mpv-android

  • Built on the powerful mpv media player, offering advanced playback features and extensive codec support
  • Highly customizable with a wide range of options and settings
  • Active development with frequent updates and improvements

Cons of mpv-android

  • Larger app size due to bundled libraries and codecs
  • Steeper learning curve for users unfamiliar with mpv's interface and features
  • May consume more system resources compared to lighter alternatives

Code Comparison

Player:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    binding = FragmentPlayerBinding.inflate(inflater, container, false)
    return binding.root
}

mpv-android:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.player)
    setupDecor()
    initListeners()
}

Both projects use Kotlin for Android development, but their structure and implementation differ. Player uses view binding, while mpv-android follows a more traditional approach with setContentView. mpv-android's codebase is generally more complex due to its extensive feature set and integration with the mpv core library.

VLC for Android, Android TV and ChromeOS

Pros of VLC-Android

  • Extensive feature set, including network streaming and subtitle support
  • Large, active community with frequent updates and bug fixes
  • Supports a wide range of audio and video formats

Cons of VLC-Android

  • Larger app size due to comprehensive feature set
  • More complex user interface, potentially overwhelming for casual users
  • Higher resource consumption, especially on older devices

Code Comparison

VLC-Android (Java):

@Override
public void onPlaybackStateChanged(int state) {
    switch (state) {
        case Player.STATE_READY:
            updatePlayPauseButton();
            break;
        case Player.STATE_ENDED:
            finish();
            break;
    }
}

Player (Kotlin):

override fun onPlaybackStateChanged(playbackState: Int) {
    when (playbackState) {
        Player.STATE_READY -> updatePlayPauseButton()
        Player.STATE_ENDED -> finish()
    }
}

Both repositories handle playback state changes, but Player uses Kotlin's more concise syntax. VLC-Android's Java implementation is slightly more verbose but functionally equivalent.

Android Client for Jellyfin

Pros of Jellyfin Android

  • Full-featured client for Jellyfin media server, offering a comprehensive media streaming experience
  • Supports a wide range of media formats and streaming protocols
  • Integrates with Jellyfin server for user management, libraries, and metadata

Cons of Jellyfin Android

  • Larger app size and more complex codebase due to its comprehensive feature set
  • Requires a Jellyfin server setup, not a standalone media player
  • May have higher resource usage compared to lightweight players

Code Comparison

Player (Kotlin):

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return inflater.inflate(R.layout.fragment_player, container, false)
}

Jellyfin Android (Java):

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_playback, container, false);
    unbinder = ButterKnife.bind(this, view);
    return view;
}

The code snippets show similar view inflation methods, but Jellyfin Android uses ButterKnife for view binding, indicating a more complex UI structure. Player uses Kotlin, while Jellyfin Android primarily uses Java, reflecting different development approaches.

3,326

NOVA opeN sOurce Video plAyer: main repository to build them all

Pros of aos-AVP

  • More comprehensive feature set, including network streaming and subtitle support
  • Actively maintained with frequent updates and bug fixes
  • Larger community and contributor base

Cons of aos-AVP

  • Larger app size and potentially higher resource usage
  • More complex codebase, which may be harder to navigate for new contributors
  • Longer development cycle for new features due to the project's scope

Code Comparison

Player (Kotlin):

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return inflater.inflate(R.layout.fragment_player, container, false)
}

aos-AVP (Java):

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.video_player_fragment, container, false);
    mSurfaceView = (SurfaceView)v.findViewById(R.id.surface);
    return v;
}

Both projects use similar approaches for creating the player view, but aos-AVP includes additional setup for the SurfaceView component.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Just (Video) Player

GitHub release (latest SemVer) Google Play F-Droid GitHub all releases Google Play Google Play Media3 Weblate project translated Subreddit subscribers

Android video player based on Media3 (formerly ExoPlayer), compatible with Android 5+ and Android TV.

It uses ExoPlayer's ffmpeg extension with all its audio formats enabled (it can handle even special formats like AC3, EAC3, DTS, DTS HD, TrueHD etc.).

It properly syncs audio with video track when using Bluetooth earphones/speaker. (I was not able to find any other nice ExoPlayer based video player so I created this one.)

Supported formats

  • Audio: Vorbis, Opus, FLAC, ALAC, PCM/WAVE (μ-law, A-law), MP1, MP2, MP3, AMR (NB, WB), AAC (LC, ELD, HE; xHE on Android 9+), AC-3, E-AC-3, DTS, DTS-HD, TrueHD
  • Video: H.263, H.264 AVC (Baseline Profile; Main Profile on Android 6+), H.265 HEVC, MPEG-4 SP, VP8, VP9, AV1
  • Containers: MP4, MOV, WebM, MKV, Ogg, MPEG-TS, MPEG-PS, FLV, AVI (🚧)
  • Streaming: DASH, HLS, SmoothStreaming, RTSP
  • Subtitles: SRT, SSA/ASS (limited styling), TTML, VTT, DVB

HDR (HDR10+ and Dolby Vision) video playback on compatible/supported hardware.

AC-4 audio is supported on devices providing such system decoder (e.g. Samsung Galaxy A, S and Z series running Android 11 or later).

Screenshots

Features

  • Audio/subtitle track selection
  • Playback speed control
  • Horizontal swipe and double tap to quickly seek
  • Vertical swipe to change brightness (left) / volume (right)
  • Pinch to zoom (Android 7+)
  • PiP (Picture in Picture) on Android 8+ (resizable on Android 11+)
  • Resize (fit/crop)
  • Volume boost
  • Auto frame rate matching on Android TV/boxes (Android 6+)
  • Post-playback actions (delete file/skip to next)
  • Touch lock (long tap)
  • App shortcut for direct access to file chooser (Android 7.1+)
  • 3rd party equalizer / audio processing support (e.g. Wavelet)
  • Media Session and Audio Focus support
  • Pause playback when disconnecting headphones
  • No ads, tracking or excessive permissions

Some advanced features can be enabled or configured in settings. To access it, long press the ⚙️ gear icon. (Alternatively, you can also enter this settings from App info screen.)

  • Default audio tracks. Set specific language, prefer device language, media file defaults.
  • File access mode. Use of Storage Access Framework / MediaStore / legacy file access.
  • Decoder priority. Prefer device or app decoders.
  • Auto frame rate matching. (On Android 11+ and "compatible" displays, ExoPlayer supports seamless refresh rate switching)
  • Tunneled playback. Enabling tunneling can improve playback of 4K/HDR content on Android TV.
  • Playback of Dolby Vision profile 7 (UHD Blu-ray) as HDR HEVC
  • Auto picture-in-picture. When you leave Just Player through the home button and video is playing, PiP will be activated automatically.
  • Skip silence
  • Repeat toggle

WRITE_SETTINGS ("Modify system settings") permission: When the system file chooser is opened, it will always use current system orientation, even if the Player app sets its own. Granting this permission via adb (adb shell pm grant com.brouken.player android.permission.WRITE_SETTINGS) or App info screen will allow this app to temporarily enable Auto-rotate to at least partially mitigate this imperfection.

Donate: PayPal | Bitcoin | Litecoin

Translate: Weblate

Download

Get it on Google Play Get it on F-Droid Get it on GitHub Explore it on AppGallery Get it on Mi App Mall Get it on Aptoide available at amazon Get it from Microsoft

Other links/channels: application thread on XDA Developers, subreddit on reddit, entry on AlternativeTo, git mirror on GitLab

❓FAQ

How do I open subtitle file (e.g. .srt)?

To load external (non-embedded) subtitles, long press the 📁 file open action in the bottom bar. The first time you do that, you will be offered to select root video folder to enable automatic loading of external subtitles.

💡📺 Because of limitations on Android TV, Just Player is also able to open subtitle files from external file managers. You can open video file from your file manager, then return back and also open subtitle file in Just Player. Subtitle will be available in the last selected video.

Just Player is also able to detect some subtitle files when accessing videos over HTTP/HTTPS. Just use the same naming for video files as well as subtitles (e.g. video.mkv and video.srt).

How do I change subtitle font, size or color?

Open system Caption preferences on your device (usually in the Accessibility section of Settings) and you will be able to fully customize the subtitle style.

To quickly access the system Caption preferences screen, long tap the subtitle button.

Are there any media formats it CANNOT play?

Unfortunately, upstream ExoPlayer doesn't handle some older formats like AVI container, WMV or Theora. Majority of devices also cannot handle 10-bit AVC.

Just Player focuses on playing videos so audio only playback isn't officialy supported (request).

How to view detailed video information (like resolution, bitrate etc.)?

Install app like MediaInfo (or APK from MediaArea.net). Then, to quickly open MediaInfo from Just Player, long press the video name/title.

I prefer using media library instead of a file chooser...

Just Player uses system file chooser which already allows two different browsing modes:

  1. Videos - listing only device directories that contain videos

  2. File browser - full navigation in the device file system structure

Alternatively, some people choose to use the media library function of Nova Video Player and integrate it with Just Player by enabling "Allow using another video player" feature. This also gives you convenient access to content on network storages (SMB, UPnP, FTP and SFTP).

How to access videos on network storages (SMB, WebDAV, SFTP, etc.)?

  1. The default system file chooser allows access to any remote storage using appropriate Document Provider. I highly recommend CIFS Documents Provider for accessing Samba shares. There are also providers like WebDAV Provider/DAVx⁵ (WebDAV), FileManagerUtils (SFTP) and rcx. Sadly, Document providers are not supported on Android TV.

  2. Open video directly from your favorite file explorer. Solid Explorer works really well, especially if you also want to automatically load subtitles.

How do I open a streaming link, where do I enter an url?

Just Player does not have any UI to enter internet addresses, but it is registered for handling all compatible streaming links. When opening/tapping links in other apps, Just Player should be generally offered as an option. (Though this may not work in all situations, especially on Android 12+.)

Alternatively, select the text url in the source app, choose Share and find Just Player to play it.

How to zoom in to get rid of black bars?

If your device has a touchscreen you can use the pinch-to-zoom gesture or just tap the Resize button for a Crop. Android TV: Long tap the Resize button to enter Zoom mode. Then use Up and Down keys for precise zoom.

What to do if Bluetooth audio is not in sync with video?

Just pause and resume playback once again.

Why is the APK so big?

The APK available here contains native libraries for all supported architectures (armeabi-v7a/armeabi-v7a-neon/arm64-v8a/x86/x86_64), which is what takes the most space. Although Just Player relies mostly on device decoders, it packs FFmpeg for some advanced features (video chapters and frame rate detection). The second largest dependency is ICU4J - 10 MB only for charset detection of subtitle files. 🤷

Please note that installs and updates made through Google Play are significantly smaller thanks to Android App Bundles and delta updates.

Other open source Android video players

Here's a comparison table presenting all available and significant open source video players for Android I was able to find. Just Player is something like 80% 90% feature complete. It will probably never have dozens of options or some rich media library UI. It will never truly compete with feature rich VLC. It just attempts to provide functional feature set and motive others to create greater players based on amazing ExoPlayer.

App name (source)Media engineGesturesPiPCutout (notch)Android TV
Fermata Media PlayerMediaPlayer, ExoPlayer and libVLC🟡 Seek/Volume🔴 No🔴 No🟢 Yes
Just (Video) PlayerExoPlayer🟢 Seek/Volume/Brightness🟢 Yes🟢 Yes🟢 Yes
Kodi?🔴 No🔴 No🔴 No🟢 Yes
mpvlibmpv🟢 Seek/Volume/Brightness🟢 Yes🟢 Yes🟢 Yes
Next PlayerExoPlayer🟢 Seek/Volume/Brightness🟢 Yes🟢 Yes🔴 No
Nova Video PlayerMediaPlayer🟡 Volume/Brightness🟢 Yes🟢 Yes🟢 Yes
VLClibVLC🟢 Seek/Volume/Brightness🟢 Yes🟢 Yes🟢 Yes

To find other video players (including non-FOSS), check out a list on IzzyOnDroid.