Wholphin/DEVELOPMENT.md
damontecres 6be2662d4e
Add experimental MPV player backend (#161)
Experimental MPV player backend

Related to #14, #22, & #85

You can switch to MPV in advanced settings and toggle using hardware
decoding or not.

This uses code and buildscripts from
https://github.com/mpv-android/mpv-android, plus other third party
libraries to build MPV
2025-11-16 18:46:25 -05:00

2.6 KiB

Wholphin developer's guide

See also the Contributing guide for general information on contributing to the project.

Overview

This project is an Android TV client for Jellyfin. It is written in Kotlin and uses the official Jellyfin Kotlin SDK to interact with the server.

The app is a single Activity (MainActivity) with MVVM architecture.

The app uses:

Getting started

We follow GitHub's fork & pull request model for contributions.

After forking and cloning your fork, you can import the project into Android Studio.

You need a compatible Android Studio version for the configured AGP. This is generally Narwhal 3 Feature Drop | 2025.1.3 or newer. See https://developer.android.com/build/releases/gradle-plugin and `libs.versions.toml.

Code organization

Code is split into several packages:

  • data - app-specific data models and services
  • preferences - Non-UI related code for user settings and preferences
  • services - hilt injectable services often used by ViewModels for API calls
  • ui - User interface code and ViewModels
  • util - Utility classes and functions

Native components

FFmpeg decoder module

Wholphin ships with media3 ffmpeg decoder module.

It is not required to build the extension in order to build the app locally.

You can build the module on MacOS or Linux with the build_ffmpeg_decoder.sh script.

MPV player backend

Wholphin has a playback engine that uses libmpv. The app uses JNI code from mpv-android and has an implementation of androidx.media3.common.Player to swap out for ExoPlayer.

See the build scripts for details on building this component.