edde746 b7a438789f feat(player): bitstream TrueHD through the MAT/IEC 61937 carrier
Copies the path Kodi uses, and replaces nothing-but-detection with a route that
actually plays (#1804).

Android will not bitstream raw TrueHD on the TV routes measured here. Both
connected boxes report ENCODING_DOLBY_TRUEHD as offload-only while reporting
ENCODING_IEC61937 at 192kHz/7.1 as bitstream-capable. Kodi models exactly that
split: it packs the carrier itself and offers "AudioTrack (IEC)" as the
recommended sink, treating raw TrueHD as a fallback that it still runs at
192kHz. Media3 only ever hands Android raw TrueHD at the stream rate, which on
the reporter's box takes one write and then never advances the playback head.

TrueHdCarrierSink routes TrueHD onto a dedicated delegate and leaves everything
else on the existing processed sink. The split is deliberate rather than
enforcing that the normal processors stay inactive: the carrier is a bit-exact
byte stream shaped like PCM, so a downmix, Sonic pass or silence skip turns it
into full-scale noise at the receiver. A delegate built with an empty
AudioProcessorChain makes that impossible by construction, instead of putting
the guarantee in a different class from the thing it protects.

The carrier delegate keeps OutputConfig at PCM 16-bit so media3's position,
pending-data and release accounting all stay on their mature PCM path — correct
here, because after packing the stream really is a fixed-rate 192kHz 8-channel
carrier. Only the AudioTrack itself is switched, through the builder modifier
upstream applies just before AudioTrack.Builder.build(). That avoids
reimplementing AudioOutput and avoids the encoded frame-domain mismatch in
androidx/media#3329.

Burst timestamps come from the carrier cadence rather than from whichever
access unit closed the frame; anchoring on the closing unit drifts against the
time the sink derives from written frames and reports a discontinuity on nearly
every frame.

Availability is Kodi's test, not media3's: getMinBufferSize for the exact
192kHz/7.1 IEC tuple, plus getDirectPlaybackSupport where it exists to confirm
the route will bitstream rather than quietly decode. Speed changes, downmix,
normalization and 44.1kHz-family streams all decline the carrier and decode.

Verified on a SEI Robotics Box R 4K Plus (Android 14, armeabi-v7a): the carrier
is selected, the AudioTrack is built as IEC61937 at 192kHz/7.1, no audio decoder
is instantiated, zero timestamp discontinuities, and the clock tracks wall time
with no frozen samples. The same box freezes for ten seconds on raw TrueHD.
2026-08-08 10:51:15 +02:00
2026-08-05 03:57:31 +00:00
2026-08-06 05:33:18 +02:00
2025-10-22 12:45:29 +02:00
2026-05-18 22:52:51 +02:00
2025-10-22 12:45:29 +02:00
2025-10-22 12:45:29 +02:00

Plezy Logo Plezy

A modern client for Plex, Jellyfin, and Emby on desktop, mobile, and TV. Built with Flutter for native performance and a clean interface.

Website · Screenshots · Download · Contributing · License

Plezy mobile screenshots

Download

Download on the App Store Get it on Google Play Available at the Amazon App Store Get it from Microsoft

Platform Download
macOS DMG (x64, arm64)
Linux x64 .deb · .rpm · .pkg.tar.zst · portable tar.gz
Linux arm64 .deb · .rpm · .pkg.tar.zst · portable tar.gz

Package managers:

  • Nix - Community package by @mio-19 and @MiniHarinn
  • Homebrew (macOS):
    brew tap edde746/plezy https://github.com/edde746/plezy
    brew install --cask plezy
    
  • AUR (Arch Linux) - Community maintained by @jianglai:
    yay -S plezy-bin
    
  • WinGet (Windows):
    winget install edde746.Plezy
    

Features

Browse & Discover

  • Libraries, collections, and playlists — video and audio
  • Discover hub — Continue Watching, Next Up, trending, and recommendations
  • Cross-server search across every connected Plex, Jellyfin, and Emby server
  • Filtering, sorting, and alphabetical jump navigation
  • Folder browsing and folder playback — home-video libraries open in folder view
  • Resolution, HDR/Dolby Vision, and audio-format badges on cards and detail pages
  • Favorites and unwatched library filters1
  • Extras — trailers, deleted scenes, behind-the-scenes

Explore & Requests

  • Explore tab — watchlist, trending, popular, and recommendation rows from Plex Discover2 , Trakt, MyAnimeList, AniList, Simkl, and Seerr3
  • Search any connected catalog source
  • Catalog titles matched back to your own libraries by external ID
  • Seerr — request movies and shows with per-season, 4K, and advanced destination options, and see request status inline
  • Watchlist sync — add and remove titles on Plex, Trakt, MyAnimeList, AniList, and Simkl from anywhere in the app

Playback

  • Wide codec support (HEVC, AV1, VP9, and more)
  • HDR and Dolby Vision4
  • Direct play, or transcode presets from 240p/320 kbps to 1080p/20 Mbps
  • Multi-version switching with per-version file details
  • Full ASS/SSA subtitles with customizable styling
  • Online subtitle search & download2
  • Audio & subtitle choices remembered per title, or follow the server's per-episode selections
  • Progress sync and resume
  • Auto-play next episode with skip intro / skip credits
  • Chapter navigation with thumbnail scrub previews
  • Playback speed from 0.25x to 8x, audio sync offset, sleep timer (fixed durations or end of video)
  • Video zoom 50-200% with pinch, presets, and hotkeys
  • Audio passthrough5 , stereo downmix with center-channel boost, and loudness normalization
  • File Info sheet — every version, file, and stream the server reports
  • Ambient lighting and GLSL shader presets6
  • Picture-in-Picture7
  • Refresh-rate matching8
  • External player launch (VLC, MX Player, etc.) with progress sync back9

Music

  • Music libraries — artist, album, and track browsing with square artwork
  • Album and artist screens with play, shuffle, and Instant Mix
  • Gapless playback with a full play queue — reorder, remove, play next, add to queue
  • Now Playing with synced lyrics10 , persistent mini-player, and sleep timer
  • Background playback with lock-screen, media-key, and notification controls11
  • Offline playback of downloaded albums and tracks
  • Streaming quality presets — Original, 320, 192, or 128 kbps

Live TV & DVR

  • Live TV channel browsing, tuning, and favorites
  • EPG guide with What's On and per-show schedules
  • DVR recording rules, scheduled recordings, and a rememberable recording target library2
  • Multi-server Live TV support where available

Downloads & Offline

  • Download movies, shows, and music for offline playback12
  • Background queue with pause / resume
  • Sync rules for automatic downloads, with per-show "Include Specials"
  • Offline browsing with watch state sync-back on reconnect

Watch Together

  • Synchronized playback with friends
  • Real-time play / pause / seek sync

Integrations

  • Discord Rich Presence13
  • Trakt, MyAnimeList, AniList, and Simkl — ratings, watched sync, and real-time scrobbling14
  • Plezy Remote — control desktop and TV from mobile
  • Watch Next row and tvOS Top Shelf15

Platform & Customization

  • Desktop, mobile, and TV — full D-pad, keyboard, and gamepad support
  • Multiple servers at once — Plex, Jellyfin, and Emby side by side
  • Profiles with per-profile downloads, watch state, and settings; Plex Home switching with PIN
  • Jellyfin and Emby local-server discovery and multiple URLs per server; Quick Connect sign-in16
  • TV layout options — corner spotlight backdrop, full-card artwork, and Force TV mode on desktop
  • Customizable keyboard shortcuts13
  • Metadata and artwork editing
  • Settings import/export
  • Localized in English plus 21 translations

Building from Source

Prerequisites

  • Flutter SDK 3.44.0+
  • A Plex account, or a Jellyfin or Emby server with user credentials

Setup

git clone https://github.com/edde746/plezy.git
cd plezy
flutter pub get
scripts/codegen.sh
flutter run

Code Generation

After modifying model classes or other generated sources:

scripts/codegen.sh

After modifying translations:

dart run slang

Local Checks

scripts/ci_checks.sh

To install the same pre-commit checks locally:

scripts/setup_hooks.sh

End-to-end tests (Android emulator plus a Dockerized Jellyfin fixture):

python3 scripts/run_maestro.py basic

Contributing

See CONTRIBUTING.md for development workflow, formatting, tests, and translation guidelines.

License

Plezy is licensed under GPL-3.0.

Acknowledgments


  1. Jellyfin and Emby only. ↩︎

  2. Plex only. ↩︎

  3. Requires connecting the service under Settings > Services. ↩︎

  4. In-app HDR toggle on Windows, macOS, iOS, and tvOS. Dolby Vision on Android and Apple TV. ↩︎

  5. Desktop, Android TV, and Apple TV. ↩︎

  6. Requires the mpv player backend — unavailable on iOS and tvOS, and Android defaults to ExoPlayer. ↩︎

  7. Android, iOS, and macOS — not on Android TV or Apple TV. ↩︎

  8. Windows, Android, and tvOS. ↩︎

  9. Progress sync on Android. ↩︎

  10. Where your server provides lyrics. ↩︎

  11. tvOS pauses music when the app is backgrounded. ↩︎

  12. Not available on tvOS. ↩︎

  13. Desktop only. ↩︎

  14. Real-time scrobbling on Trakt and Simkl; MyAnimeList and AniList update on completion. ↩︎

  15. Android TV / Fire TV and tvOS. ↩︎

  16. Jellyfin only. ↩︎

S
Description
Modern cross-platform Plex & Jellyfin client built with Flutter
Readme GPL-3.0
223 MiB
Languages
Dart 73.8%
GLSL 13.3%
Kotlin 4.3%
C++ 2.3%
Python 1.7%
Other 4.3%