* refactor: extract HEVC and AV1 codec modules Follows up on #5604 by extracting the HEVC and AV1 codec detection logic out of MediaCodecCapabilitiesTest into their own modules. After this change MediaCodecCapabilitiesTest is a thin delegation facade with no logic of its own. SDK version branching uses the shared AndroidVersion helper (#5672) so the checks read clearly at the call site and can be mocked in tests via AndroidVersion.sdkInt, rather than a codec-local DeviceSdk wrapper. The same helper replaces the remaining raw SDK_INT check in MediaCodecQuery. * fix: use media3 MimeTypes constants to avoid InlinedApi lint MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION requires API 24 but min SDK is 23. Hoisting it into a const val tripped the InlinedApi lint check. Switch to the media3 library MimeTypes constants (plain strings, no API gate), matching how Av1CodecCapabilities already references them.
Jellyfin for Android TV
Part of the Jellyfin Project
Jellyfin for Android TV is a Jellyfin client for Android TV, Nvidia Shield, and Amazon Fire TV devices. We welcome all contributions and pull requests! If you have a larger feature in mind please open an issue so we can discuss the implementation before you start.
Building
The app uses Gradle and requires the Android SDK. We recommend using Android Studio, which includes all required dependencies, for
development and building. For manual building without Android Studio make sure a compatible JDK and Android SDK are installed and in your
PATH, then use the Gradle wrapper (./gradlew) to build the project with the assembleDebug Gradle task to generate an apk file:
./gradlew assembleDebug
The task will create an APK file in the /app/build/outputs/apk/debug directory. This APK file uses a different app-id from our stable
builds and can be manually installed to your device.
Branching
The master branch is the primary development branch and the target for all pull requests. It is unstable and may contain breaking
changes or unresolved bugs. For production deployments and forks, always use the latest release-x.y.z branch. Do not base production work
or long-lived forks on master.
Release branches are created at the start of a beta cycle and are kept up to date with each published release. Maintainers will cherry-pick selected changes into release branches as needed for backports. These branches are reused for subsequent patch releases.
Translating
Translations can be improved very easily from our Weblate instance. Look through the following graphic to see if your native language could use some work! We cannot accept changes to translation files via pull requests.