Brings the fork up to official NuvioTV 0.8.10 and ships the whole 0.8.8-beta series at once: lossless remuxes that start almost instantly, playback that survives CDN rate-limiting and corrupt Usenet streams, add-ons that stop vanishing, decoded audio that keeps your surround channels, and — new from upstream — post-play recommendations plus a run of subtitle, name-display and stability fixes.
Validated on the Ugoos AM9 Pro → Samsung HW-Q800F → LG C9 (eARC), playing 4K Dolby Vision + lossless remuxes from Emby, TorBox and Usenet. Timings vary with network conditions.
At a glance
- Lossless titles start much faster — a TrueHD/DTS-HD MA cold start went from a 2–7 s silent freeze to ~0.2–0.7 s.
- Rate-limiting no longer crashes playback — a burst of HTTP 429/503 rides out instead of ending in a "Source error".
- Corrupt Usenet streams recover on their own — the player skips the damage or fails over to another source automatically.
- Add-ons stop disappearing — one that hits a momentary hiccup no longer vanishes until you log out and back in.
- A class of ~16–17 s startup/resume freezes is fixed, now clearing in a couple of seconds.
- Decoded audio keeps your surround channels — formats your gear can't take downmix to your layout (5.1) instead of collapsing to stereo, even on Prefer device decoders.
- The Device Assessment sets up your audio chain, recommending per-format passthrough based on what your gear accepts.
- The stats HUD tells you more — real output resolution, throttle status, an accurate rebuffer count, and the actual Usenet indexer.
- Post-play recommendations, from upstream — at the end of a film or finished series, the player offers something to watch next. Off by default.
- Everything from official 0.8.9 and 0.8.10 — per-show playback speed, home catalogs that refresh on return, a system-language subtitle option, corrected CJK/Japanese names, and assorted subtitle, live-TV, search and stability fixes. Thanks to the upstream authors: [@tapframe](https://github.com/tapframe), [@halibiram](https://github.com/halibiram), [@skoruppa](https://github.com/skoruppa), [@haveAnIssue](https://github.com/haveAnIssue), [@Telkaoss](https://github.com/Telkaoss), [@ieno](https://github.com/ieno), [@liongalahad](https://github.com/liongalahad), [@blueocean2308](https://github.com/blueocean2308), [@omavel](https://github.com/omavel), [@diogovbs](https://github.com/diogovbs), [@nosvasedis](https://github.com/nosvasedis), [@uHleaf](https://github.com/uHleaf) and [@mmsw91](https://github.com/mmsw91).
New
Decoded audio keeps your surround channels
When your gear can't accept a format (DTS on many TVs is the classic case), the app has to decode it — and that used to collapse to stereo on the everyday Prefer device decoders setting. You can now pick the channel count it downmixes to, so a 7.1 DTS track comes out 5.1 instead of 2.0. Formats your gear can take (Dolby Digital, TrueHD/Atmos) still bitstream untouched.
Setup — in Playback → Audio: Decoder Priority to Prefer device decoders, turn Enable downmix on, pick Number of channels. Then use the per-format "… capable receiver" toggles — off for formats your gear can't take (decoded + downmixed), on for the rest (still bitstream). The Device Assessment can set these for you. Leave Android's surround settings on Auto.
Common setups:
- Modern Dolby soundbar or TV, no DTS (many Samsung/LG): Dolby on, DTS and DTS-HD off — all Dolby (Atmos included) bitstreams untouched, while DTS/DTS-HD decode and downmix to your layout instead of collapsing to stereo.
- Full AV receiver / Soundbar (decodes everything): all toggles on — everything bitstreams at full quality, and the downmix sits idle as a safety net.
- Older receiver, core formats only (Dolby Digital + DTS): those two on, the HD formats off — core formats bitstream, and the HD formats decode and downmix to your layout.
- Stereo (2.0 speakers, TV speakers or headphones): toggles off, channels set to 2.0 — every format decodes and downmixes cleanly to balanced stereo rather than a rough collapse.
If a source still comes out stereo with everything set, your connection may only accept 2-channel audio — the Max PCM line shows your output's real limit.
The Device Assessment now sets up your audio chain
Settings → Device Assessment now probes your gear format by format (AC-3, E-AC-3, TrueHD, DTS, DTS-HD) and recommends the per-format passthrough switches under Playback → Audio. A format your chain can't take gets an off recommendation with a plain reason; DTS-HD is kept on where it already plays as lossy DTS 5.1; MAT follows TrueHD; ARC connections get an AC-3 transcode recommendation rather than a stereo collapse.
It only ever recommends turning a switch off (never on, so it can't remove working passthrough), and nothing changes until you press Apply (with a revert snapshot kept). Run it with your AV chain powered on and on the right input.
Post-play recommendations (from upstream, off by default)
At the end of a film — or the last episode of a series you've finished — the player shrinks aside and offers things to watch next, with trailers that can auto-play. Select one to jump to it or open its details.
It's off by default — enable it in Settings → Playback → Auto-play → Post-play Recommendations. It also needs a source: turn on "More Like This" in TMDB enrichment (or set your More-Like-This source to Trakt and sign in), or the panel has nothing to show. It appears on films and on series with no further aired episode; otherwise the usual next-episode behaviour takes its place.
Lossless note: the auto-playing trailer opens a second short audio path — on a TrueHD/DTS-HD passthrough chain, worth confirming a trailer plays without disturbing your next passthrough lock.
Improved
Lossless titles start much faster
A TrueHD/DTS-HD MA cold start used to sit frozen and silent for 2–7 s while Android filled the whole audio buffer. It now starts as soon as a healthy amount is buffered:
- DTS-HD MA: ~5.0 s → ~0.2 s
- TrueHD: ~2.6 s → ~0.37 s
- Seeks resume in ~0.2–0.3 s
The buffer size is unchanged, so stall protection is fully retained — only the start moved earlier. Verified clean across Emby, TorBox and Usenet. On by default; an ADB override (settings put global nuvio_reduced_start_threshold <frames>, 0 to restore) is there if needed.
Fewer needless connection restarts on Usenet
The body-stall watchdog was tuned for debrid CDNs, where a chunk slowing to a trickle means a dead connection. Usenet delivers in normal bursts with short pauses, which the watchdog mistook for stalls — restarting a healthy stream ~28 times in five minutes, each throwing away a megabyte. It now recognises Usenet streams and uses a more patient rule (lower threshold, two slow readings before restarting). On the same play, restarts went 28 → 0. Debrid is untouched.
The stats HUD tells you more, and more honestly
- Display row shows the negotiated output mode (e.g.
1920×1080 · 60.00 Hz) next to the file's resolution, so downscaling is visible at a glance. - Audio row reads
6ch→2chwhen a track is downmixed. - Rate-limit row shows delivered-vs-needed rate (e.g.
serving 17.2/19.3 Mbit/s) when the CDN is throttling below what the stream needs — the cue to switch source or region. - Rebuffers count now excludes the re-buffer that follows a seek, so it's accurate.
- Provider row names the Usenet indexer (DrunkenSlug, AltHub, NZBgeek) instead of your NAS IP; Server reads
AIOStreams NNTP. Debrid still shows the store, library still shows Emby/Jellyfin.
From upstream: the app around playback
- Home catalogs refresh when you return (15-minute window, focus preserved); the add-on refresh button refreshes catalogs too.
- Playback speed is remembered per show.
- A system-language subtitle option — a new Device choice that follows your system language. This fork keeps its own default of subtitles off when none is chosen; Device sits alongside as an explicit option.
- Names display correctly for more titles — cast, crew, filmography and network browsers fall back to English/Romaji when only CJK script is returned. Long cast bios can be expanded from the portrait.
- The subtitle sync slider reaches 180 s for badly out-of-sync tracks.
- Discover remembers your selection, and landscape posters are respected in discovery.
Changed
Post-play recommendations ship off
Upstream enables these by default; this build ships the toggle off, so the end-of-content experience is unchanged unless you turn it on. See New above.
Live TV: the crash fixes, not the chrome
This build takes upstream's controller-side live fixes (crash fix, seek/timeline guards) because they harden playback generally, but not the new live-TV player chrome — this fork isn't used for live streams.
Episode overlay appearance
Upstream added appearance options for the episode-options overlay; this fork keeps its own episode dialog, so that row isn't present (plumbing carried for parity). No change to how episodes are played.
Fixed
Rate-limiting no longer crashes playback
An HTTP 429/503 storm could surface as a fatal "Source error" even with buffer left. The player now keeps retrying with backoff while the server is throttling, and only gives up (handing to failover) after 120 s of zero progress — a genuinely dead stream. Healthy streams are unaffected; failover on a truly dead source is slightly later, the deliberate trade.
Corrupt Usenet streams no longer kill playback
A gap in an incomplete Usenet release used to end in a "Playback Error". The player now skips a small hole and keeps playing (position kept; a brief glitch at the skip), or fails over to another source for the same title if the damage is too large — automatically. Affects MKV streams and recovers around the file's data, so it works regardless of source. The automatic source-switch also helps any source that goes bad mid-play, not just corrupt ones.
Add-ons no longer vanish from your lists
An add-on whose manifest couldn't be fetched at the wrong moment was silently dropped from the installed list — vanishing from sources and settings until a log-out/log-in. It's now kept as a placeholder and retried in the background (~30 s, 2 min, 10 min), healing itself. Refresh Add-ons now forces a fresh manifest fetch of every add-on, recovering a stuck one immediately. A placeholder offers no streams until its real manifest loads.
A class of startup and resume freezes
Some starts and Continue Watching resumes froze for ~16–17 s when the reader blocked on a chunk whose connection had died before delivering bytes. The app now races a duplicate on a fresh connection and feeds the reader the moment its first bytes land, resolving the freeze in ~2–3 s. Fires only on a genuinely stalled chunk, never on slow ones, never during rate-limiting. (Distinct from the faster-lossless-start change above.)
Episode ratings populate on the details page
The series Ratings tab showed "—" for every episode because the external rating service addresses were never supplied to this fork's build. They're now configured and the tab fills in (keyed by TMDB id; mainstream coverage is good, missing titles still show "—"). Third-party services, so the tab degrades to "—" rather than erroring if they change.
Turning IMDb trailers off now takes effect immediately
With IMDb trailers off, the home hero kept playing already-resolved IMDb trailers until force-stop. Switching YouTube ↔ IMDb now clears the home trailer cache and re-fetches from the new source, no restart needed.
The hero trailer no longer overlaps the synopsis
With full-screen home hero disabled, the top-right trailer window sat over the description. It's now positioned clear of the text, with a small inset, at any interface scale.
From upstream: playback, subtitles and stability
- Live IPTV no longer crashes from a Media3
bufferedPercentageoverflow; live channels are treated as a watch-clock, not a VOD timeline. - Subtitle timing no longer crashes on duplicate cue keys (NUVIO-TV-QR).
- Subtitle charset detection is fixed for Western European and legacy single-byte encodings.
- Low-RAM scraping no longer exhausts its IO threads (NUVIO-TV-FS).
- A plugin sync path can no longer crash playback (CS3 HomeViewModel stubbed, NUVIO-TV-2X).
- Poster corner radius now applies everywhere.
- Library focus returns to the selected mode; library search no longer jitters or traps focus.
- Search keeps its keyboard suggestion strip during live search, and persists your discover selection.
- Continue Watching forwards content language correctly; a launcher CW card opens the right title on resume.
- Networking:
304/redirect responses are no longer wrongly marked no-store; the selected source is restored after playback.
Install
Sideload via ADB or a file manager. Application ID com.nuvio.tv.test, so it installs alongside official NuvioTV rather than replacing it.
Licence and attribution
GPL v3.0. All upstream copyright headers, licence text and developer attributions are preserved; no licence text was removed.
- Upstream is [NuvioMedia/NuvioTV](https://github.com/NuvioMedia/NuvioTV), whose player, audio sink, renderer, tracking and settings plumbing this work extends. The post-play recommendations, live-TV handling, subtitle and name-display work, per-show speed and home-refresh behaviour folded in here are upstream's. This fork is not affiliated with or endorsed by NuvioTV — please don't report issues from this build upstream.
- The per-format audio model the Device Assessment configures follows Kodi's
audiooutput.*passthroughsettings and label wording; no Kodi source code is used there. The channel-downmix maths is adapted from Kodi's downmix code, with original authors credited in the relevant files. Kodi is GPL-2.0-or-later, compatible with GPL-3.0, and is credited inres/values/strings.xmland file headers. - Provider/store vocabulary in the stats HUD is derived from the AIOStreams project's published provider list.