github ahXN00/OwnTV v4.0.0
OwnTV v4.0.0

latest releases: v4.2.2, v4.2.1, v4.2.0...
one month ago

v4.0.0 — 2026-07-02

📄 License

  • OwnTV has moved from the MIT License to the GNU General Public License v3.0 (GPLv3). OwnTV
    remains fully open-source — anyone can use, study, modify, and redistribute it, including commercially —
    but any redistributed version (forks, modified builds, or commercial products built on it) must also
    be licensed under GPLv3 with its source made available. Versions released before this change remain
    available under MIT. See LICENSE.

Big release — the community‑feedback UI upgrade (3 phases; Phase 1's quick wins are the first two
entries below) folded together with a large batch of new features, performance work and fixes.

⚡ Much faster syncing & background updates (community PR #40 by @codeVerine — Sagar Mukundan UV, integrated & hardened)

  • Priority sync during setup — when adding an Xtream playlist you can choose what to import first
    (e.g. Live TV only). You land in the app as soon as the priority content is ready, and the rest
    (movies/series) finishes automatically in the background — even if you leave the screen or the
    device sleeps (WorkManager-backed, survives sleep/reboot).
  • Incremental re-syncs — re-syncing a source now compares content hashes and only writes what
    actually changed, instead of re-importing everything. Re-syncs of large playlists are dramatically
    faster and no longer churn the database.
  • Incremental EPG sync — guide refreshes also skip unchanged programmes and prune removed ones.
    Memory use is strictly bounded, so even multi-million-programme guides stay safe on low-RAM boxes.
  • More resilient downloads — playlist/EPG downloads retry automatically on transient network
    errors, and sync progress reporting is smoother and more accurate.
  • Integration hardening on top of the PR: database migrations were renumbered so both v3.2.0 users
    and dev builds upgrade cleanly (final schema v9); staged priority syncs now correctly mark the
    source as synced once the background remainder finishes; favorites/history/resume are re-attached
    after every sync attempt (permanent cleanup only after a fully successful full sync); and EPG
    hash tracking loads per-channel with a hard memory cap.
  • Post-integration fixes from on-device testing:
    • Favorites/history could vanish when several playlists refreshed at once — cleanup of stale
      user data is now strictly scoped to the playlist that actually synced (an empty sync snapshot
      never triggers a global cleanup anymore), and parallel startup refreshes can no longer purge
      against each other's in-flight state.
    • M3U playlists: movies tagged as VOD landed in Live TV again — the sync rewrite had dropped
      the VOD detection; entries tagged type="vod" / type="movie" / tvg-type="movie" go back to
      the Movies grid with their own categories.
    • NEW: M3U series playlists import as real series — entries tagged type="series" /
      tvg-type="series" (per-episode lines like "Stranger Things S01E05", also 1x05 style) are
      now grouped into shows with seasons and episodes under the Series tab, instead of piling up
      as live channels or loose movies. Entries without an episode pattern become a show with
      sequentially numbered episodes.
    • TV Guide header showed a date up to a week in the past — with catch-up channels the header
      displayed the archive's start date. It now shows today when the Guide opens, and follows the day
      you're browsing when you scroll back into the archive.
    • Subtitle/audio selection could open with nothing focusable on HDR/HDR10/DTS content — the
      player's pickers (subtitles, audio, speed, zoom, volume) were overlays competing with the HUD
      for D-pad focus, and heavy streams could win that race and lock the picker out. They are now
      real dialog windows that own the remote's focus outright — on both engines, live and VOD — so
      selection always works.
    • Episode list had no panel background — opening a series showed its episodes on a bare
      background; the list now sits in the same rounded content panel as every other screen.

⚠️ Upgrade note for EPG users: v4.0.0 redesigned EPG loading. If the Guide shows blank on first open
or after re-entry, delete your EPG sources and re-add them (Settings → EPG → Edit → delete, then add
again) and resync. Old cached EPG data is incompatible with the new loader — a fresh import fixes it.
This is a one-time fix after upgrading.

🐛 Fixes

  • Live TV could give up reconnecting too early during a real outage — a single failed reconnect
    attempt was being counted twice against the retry budget (ExoPlayer fires both an error and an idle
    event for the same failure), so a provider hiccup that needed ~30–60s to recover could exhaust all
    retries and show "Lost connection to this channel" well before the stream was actually back. Reconnect
    attempts are now deduplicated so each real failure only counts once, and the retry budget was raised
    slightly to cover longer outages.

  • Audio-plays-but-no-video no longer leaves you stuck on a black screen — some streams/files could
    play sound with no picture (both Surround Sound on and off), because the existing freeze watchdogs only
    caught a total stall or a freeze after a frame had already been seen — never "audio/position is
    advancing fine, but a video track exists and has never produced a single frame." All three playback
    paths now detect this specifically:

    • Live TV, ExoPlayer (primary engine): if no video frame renders within ~8s while audio/position
      keeps advancing, it automatically tries the mpv compatibility fallback once (shows the spinner during
      the switch, no loop). If mpv plays it fine, playback continues normally; if mpv also fails, a clear
      on-screen message is shown.
    • Live TV, mpv (compatibility-mode / fallback channels): the same condition now triggers the existing
      bounded reconnect/reload path; if video still doesn't appear after the retry budget, shows "Audio is
      playing, but video could not be rendered on this device."
    • VOD, image-subtitle handoff (PGS/VOBSUB/DVB subtitles): the brief ExoPlayer handoff used only for
      these subtitle types now has the same first-frame timeout, falling back to mpv with a clear message if
      it can't render video either. The main VOD (mpv) path already had a working no-video watchdog.
  • Favorites could disappear after a source re-sync failed partway through — a source's clear-then-insert
    import is deferred per chunk (old content is only wiped once new data starts arriving), so a sync that
    failed midway (e.g. flaky Wi-Fi right as a Fire TV woke from sleep) could leave content partially cleared.
    Favorites/history/resume are re-attached to the new content ids only after a successful sync, so a
    failed one left them silently orphaned (rows still existed but resolved to nothing) until a later sync
    healed them — in the meantime they simply looked gone. Re-attaching now runs after every sync attempt,
    successful or not; only a fully successful sync is still allowed to permanently drop favorites for
    content the provider actually removed.

  • Live TV no longer freezes silently mid-stream — a live channel could play smoothly and then
    freeze/hang with no spinner, no reconnect and no error (replaying the channel fixed it). This happened
    when a feed stalled in a way the player didn't signal — the stream stops advancing while the socket
    stays open, so there was no buffering event, no error and no end-of-file to react to. Both playback
    backends now detect this:

    • ExoPlayer (the primary live engine): the silent-freeze watchdog now keys off intent to play
      instead of the stricter "is-playing" flag (which briefly flickered off during a stall and kept
      resetting the freeze timer), and adds an absolute "no forward progress for ~8s" backstop that can't be
      missed even if per-frame detection isn't available. On a stall it shows the spinner and auto-reconnects
      to the live edge (bounded retries with back-off), surfacing "Lost connection to this channel." only
      after repeated failures.
    • mpv (compatibility-mode / fallback channels): added an equivalent live progress watchdog that
      detects a frozen stream, shows the spinner and reconnects with a bounded retry budget.
    • The loading spinner is now shown consistently while a live stream is buffering, reconnecting or
      retrying in either backend, and clears once playback resumes or a final error is shown. Detailed
      Logcat is emitted around buffering / freeze detection / reconnect attempts for diagnosis.
    • Follow-up: closed a second silent dead-end in the ExoPlayer (primary live) engine — if a feed
      dropped into STATE_ENDED or unexpectedly into STATE_IDLE mid-playback, it was previously ignored
      entirely (no spinner, no reconnect, no error). Both are now treated as a recoverable stall and
      auto-reconnect, while a normal stop/back/release still exits cleanly with no reconnect attempt. Added
      a debug-only diagnostic log (state transitions, watchdog/reconnect events) plus a small bounded
      on-device diagnostic file, so a future recurrence can be captured even if it happens unobserved —
      see extras/LIVE_TV_HANG_DIAGNOSTICS.md.
  • EPG match no longer removes a channel from the Guide — matching a channel's EPG (auto or manual)
    could silently delete its stored programmes and leave the channel blank and then invisible in the
    Guide. This happened when multiple EPG sources were configured and a cache re-fill across a large
    source file was interrupted before it could restore the deleted rows. The cache re-fill is now
    parse-then-apply: programmes are only deleted for ids where fresh replacement data was successfully
    parsed first. Channels that had no in-window data in any fresh cache keep whatever they already had.

  • Show/Hide password toggle on all password fields — a Show / Hide button now appears on the
    right of every password field (Xtream password when adding/editing a playlist; PIN fields in profile
    setup and profile settings). The toggle is D-pad focusable independently of the text field, so the
    password can be revealed and re-hidden without opening the keyboard. Previously there was no way to
    see the password you had typed on either the first-run setup screen or the Settings → Playlists edit
    screen.

✨ New features

  • Backup now covers more settings and encrypts saved passwords — the backup file now also includes
    surround sound, auto-play-next, Guide sort, animation level, Movies/Series view mode, catch-up timezone
    & offset, the global proxy (host/port/user/enabled), and each profile's startup landing screen. Saved
    passwords (source/playlist and proxy) are no longer written in plaintext: on export you can set a
    backup password to encrypt them (AES-GCM, field-level only — the rest of the file stays readable),
    or export without passwords. On restore you're prompted for that password; a wrong password never wipes
    anything and lets you retry, and you can skip it to restore everything except saved passwords. Old
    backups still import as before. Both restore entry points (Settings and the first-run setup wizard)
    prompt for the backup password.
  • Manually reorder channels, movies and series — long-press any item in a category folder or Favorites
    and choose Move. A full-screen reorder overlay appears with the full list; D-pad Up/Down moves the item
    up or down, OK saves, Back cancels. The order persists across playlist re-syncs and is included in
    profile backups / restores.
  • Remove a single item from History — long-press any item in the History folder and choose
    Remove from History to delete just that entry. The existing bulk "Clear watch history" in Settings is
    unchanged.
  • Download from long-press menu — Movies and Series now show a Download / Download all episodes
    button directly in the long-press context menu, alongside the existing detail-pane download button.
    Movies queues the file immediately; Series queues every locally-cached episode (open the series once first
    if no episodes appear).
  • Settings → Customize Category — the "Customize" settings row has been renamed Customize Category to
    clarify it affects categories (hide, rename, reorder), not individual items.
  • Global HTTP proxy supportSettings → Network → Proxy lets you route all OwnTV traffic
    (playlist sync, Xtream API, EPG, images, downloads, updates) and fullscreen playback through an HTTP proxy.
    Enter a proxy host and port (optionally with username / password); a Test Proxy button verifies connectivity
    before saving. Disabling the proxy restores direct connections. The proxy is applied globally across all
    playlists — per-playlist proxy overrides and SOCKS5 support are planned for future versions. See
    extras/PROXY_SUPPORT_PLAN.md for full details and limitations.
  • Home screen with Continue Watching — a new Home tab opens to a hero carousel of your partially‑watched
    movies, episodes and recent live channels (newest first); the selected card is shown large with its poster and
    starts a muted video preview when focused, and pressing OK resumes right where you left off. Below it is a
    Favourite Channels rail. On stock Android TV launchers it also feeds the system "Continue Watching"
    (Watch Next) row, so you can resume straight from the TV home screen — Settings → Android TV home → Refresh
    now
    rebuilds those cards (with a Rebuilding… → Done status). (Sideloaded Fire TV / Google TV don't surface
    system Watch Next rows, so the in‑app Home screen is the universal landing for everyone.)
    🙏 Huge thanks to @codeVerine (Sagar Mukundan UV) for building and
    contributing this entire Home screen feature (PR #31).
  • Stream technical info overlay — in the player, the bottom-bar info button toggles a live readout of
    the current stream: video codec · resolution · fps · bit-depth, HDR type, bitrate, decoder (hardware/software
    · direct), audio codec · channels · sample rate, buffer & dropped frames, and the (credential-masked) source.
    Works on both playback engines and updates live.
  • Volume boost to 150% — for movies, series and any channel played on the mpv engine, the player volume
    can go above 100% (Kodi-style amplification, capped at 150%) for quiet streams, with mpv's internal soft
    limiter so it never harshly distorts.
  • Fixed, roomy layout — no more "sandwiched" Live TV (Phase 2) — the navigation and category panels no
    longer expand and collapse as you move the D‑pad, so the interface never jumps around. Live TV is now a
    stable grid: a slim icon nav, a full‑label category column (no more 2–3 letter abbreviations), the
    channel list, and a large preview — each a fixed size. The same fixed nav + category column apply
    across Movies, Series and the Guide. The result also feels noticeably faster on lower‑end boxes.
  • Shell redesign — new sidebar, top bar, and rounded panels (Phases 0–7) — the entire app shell has been
    rebuilt with a fixed icon-only left rail: brand logo at the top, nav items vertically centered
    (scrollable at high UI zoom), profile avatar pinned at the bottom (click = "Who's watching?" profile
    switcher, even for a single profile; long-press = avatar picker with a new "no avatar" option showing a
    silhouette). Search moved out of the rail into a new top bar that shows the active section name,
    a Search pill on the left, and a live clock, weather chip (with Canvas weather symbols — sun, moon,
    cloud, rain, snow, thunder — via Open-Meteo, free no-key API), and playlist name on the right. All
    content now sits inside rounded panels (Option A "Clean + Premium"): the category rail, content grid,
    and preview pane each get their own rounded box with 22dp corners and hairline borders, floating on a dark
    #040E0B surface. Settings submenus share the same rounded look. Theme renamed from AMOLED_DARK
    DARK with a #040E0B charcoal default (no more pure black). Neo Signal Duotone nav icons
    (Home, Live TV, Movies, Series, Downloads, Guide, Settings, plus a Profile fallback silhouette) drawn on
    crisp 100-unit Canvas. Top bar is uniform — all 5 chips (section, search, clock, playlist, weather)
    share identical height. Light mode fully supported with matching panel tints.
  • Clear watch history — Settings → Content → Clear watch history lets you wipe this profile's
    recently-watched / "continue watching" rows — all of it, or just Live TV, Movies or Series (with a
    Yes/No confirmation). Playlists, favorites and downloads are untouched.
  • Favorite a channel straight from Search — long-press a channel in search results to add or remove it
    from Favorites; a star shows the current state. No need to open Live TV first.
  • Detailed channel search results (Phase 3) — channel results now show category · channel number under
    the name, so near‑identical feeds (e.g. several "ABC" or "Sky Sports") are easy to tell apart; long‑press
    still toggles the favourite.
  • Move categories to top / bottom — in Settings → Customize, each category now has ⤒ / ⤓ buttons to jump
    it straight to the top or bottom of the list, alongside the existing one-step ↑ / ↓.
  • Animations setting (On / Off) — Settings → Appearance → Animations turns interface motion on or off.
    Off makes navigation instant — a reduce‑motion / accessibility toggle (the v4.0.0 fixed grid already
    removed the menu lag that a middle "Reduced" tier used to address).
  • Channel list in the player — while watching a channel full-screen, press Left (with the controls
    hidden) to slide out a channel list over the video — browse and switch channels without leaving
    full-screen. The current channel is highlighted; Back or Left again closes it.
  • Per‑profile startup (default landing) (Phase 3) — Settings → Startup sets, per profile, where the
    app opens: Home, the Last channel you watched (so a profile that always watches one channel boots
    straight into it), or Live TV on Favorites. Replaces the old global "Resume last channel" toggle —
    existing "On" carries over to Last channel.
  • Remembers where you were in Live TV — Live TV reopens on the category you last had selected (instead
    of resetting to All) and lands focus back on the last channel you were on.
  • Guide by category — the EPG/Guide has a new Category filter so you can view just one group at a
    time instead of every channel at once, with a search box in the category list to find a group fast.
  • Favourites in the Guide — the Guide's Sort button now includes a Favorites option, filtering
    the guide to just your favourited channels.
  • List view for Movies & Series — a new Grid / List toggle on the Movies and Series screens: switch
    the poster wall to a compact list to see many more titles at a glance.
  • A/V sync nudge in the player — open the Audio menu on a movie/episode for an A/V sync stepper to
    nudge the audio earlier/later in 50 ms steps when a badly-encoded file has the sound out of sync. It resets
    per file, so it never throws off your other movies.
  • One-tap guide sync after adding a playlist — after importing a playlist (first-run setup or Settings →
    Playlists), OwnTV now asks "Sync the TV guide now?" if the playlist has a guide feed. Sync now shows
    a live programme count (just like the playlist import) and a brief "Done"; Not now keeps it manual.
  • Long-press a channel in Live TV — long-press any channel in the Live TV list for a quick menu:
    Add/Remove Favourite, Rename, Hide, Match EPG, and Catch-up (on channels that support it) — without
    moving over to the preview pane.
  • Closed captions (CC) on Live TV — channels that embed CEA-608/708 closed captions in the video stream
    (e.g. many US channels like HBO/Showtime/Cinemax) now expose a selectable caption track in the player's
    Subtitles menu, instead of showing only "Off". (#28)
  • Compatibility mode (per-channel mpv engine) — if a live channel shows artifacts or won't play right on
    the fast engine, press the gear in the player controls to switch that channel to the mpv engine. It's
    remembered per channel, so it opens cleanly on mpv every time after — every other channel keeps the
    near-instant start.

⚡ Performance

  • Movies & Series open instantly — the grids are now pre-warmed at startup (like the Guide), and the
    query planner's table stats are refreshed after every playlist sync. A bulk sync does REPLACE on 100k+
    rows which invalidates SQLite's stats and made the planner ignore the existing (sourceId, name) /
    (categoryId, name) composite indices — so the grid fell back to a full-table sort on cold open (the 2–3s
    delay). Stats are now re-analyzed post-sync and at launch so the indices stay chosen. (Mirrors the EPG fix.)
  • The Guide opens instantly — the guide is now pre-loaded in the background at startup, so even the
    first open is immediate, and re-opening no longer flashes a loading spinner or rebuilds from scratch — it
    shows your channel list right away and refreshes silently.
  • Much faster EPG sync — the guide sync now stores programmes only for the channels you actually have
    instead of the entire feed (public XMLTV feeds often carry 10–20× more channels than your playlist). Far
    fewer rows to parse and write means a dramatically quicker, lighter sync.
  • Leaner TV Guide internals — the guide now loads every row's programmes in one batched query
    (grouped into a cache) instead of a separate query per channel row (an N+1 storm), and draws each row's
    timeline in a single Canvas pass instead of dozens–hundreds of per‑cell composables. The catch‑up
    lookback streams in on a background thread (memory‑safe on low‑RAM boxes), the channel list is built off
    the main thread, and re‑sorting/filtering reuses the cache. Mostly an efficiency/memory win — lighter on
    large channel lists and multi‑day catch‑up windows.

🔧 Internal

  • Room database version 6 → 7: new content_order table stores per-profile manual item ordering; included in backup/restore.
  • Long-press context menus on Movies and Series replaced the previous instant-favourite-toggle with a full menu (Favourite, Move, Remove from History, Download, Close).

🐛 Bug fixes

  • Per-source User-Agent for playback — each source now supports a custom User-Agent (entered in source
    settings), and it is consistently applied to Live TV, Movies, Series, and EPG playback on both mpv and
    ExoPlayer. If playback fails with a format/demuxer error and no custom UA was set, the app retries once
    with the short vlc User-Agent — some providers block the full VLC/3.0.20 LibVLC/3.0.20 string but
    accept the short form. If that also fails, the error message hints: "This provider may require a custom
    User-Agent in source settings."
  • No more false "Playback error" over a movie that's actually playing — on some TVs (e.g. Realtek-based
    panels) the hardware decoder takes a few seconds to negotiate and deliver its first frame, which made the
    VOD watchdog wrongly conclude the file wasn't streamable and show "This video isn't formatted for
    streaming…"
    on top of perfectly-playing video. The watchdog now waits a little longer before that verdict
    and, more importantly, automatically dismisses the popup the moment a real video frame decodes. Genuinely
    non-streamable files still surface the error as before.
  • Startup focus rests on the nav — on a cold start (or switching to the Home tab) focus now stays on the
    Home item in the sidebar instead of being pulled into the content; it only jumps into the hero when you
    return from the player. (Builds on @codeVerine's empty‑Home focus fix,
    PR #32.)
  • Clear watch history now empties Movies/Series from Home too — clearing history (all, or just Movies /
    Series) now also wipes the resume positions that feed Home's "Continue Watching", so those titles
    actually leave the row (previously only Live cleared).
  • Live preview shows full stream spec — the preview pane's badge now shows aspect · resolution · fps ·
    audio
    (e.g. 16:9 · 4K · 50 FPS · STEREO) instead of resolution alone.
  • Startup → Live · Favorites lands inside the list — choosing this startup mode now drops focus on the
    first favourite channel instead of the navigation panel, so you can start zapping immediately.
  • Long‑press channel menu keeps focus on the channel — closing the Live TV long‑press menu (Cancel /
    Favourite / Hide) now returns focus to that channel instead of jumping back to the navigation panel.
  • Clearer Surround sound warning — the setting now explains that multichannel can drift audio behind
    video (lip‑sync) on some TVs/soundbars, and points to the player's Audio → A/V sync nudge to correct it.
    (Surround stays off by default; the drift is a hardware‑latency reality of multichannel LPCM over HDMI/ARC.)
  • Imports survive a provider that errors on the full Movies/Series list — some providers (e.g. peoplestv)
    return a non-standard HTTP 512 on the giant bulk get_series / VOD response, which used to abort the
    whole import after the channels had loaded. Now a bulk error automatically falls back to fetching that
    section one category at a time
    (small requests those panels serve fine) — and if even that fails, the
    import keeps your channels/movies instead of failing outright. Credentials are also no longer shown in
    import errors.
  • EPG no longer fails on a single malformed tag — a guide feed with one bad/odd entry used to abort the
    whole sync with a cryptic "END_TAG expected …" error. The parser is now tolerant (relaxed mode + resilient
    text reading) and keeps everything it can, so one bad programme no longer loses the entire guide.
  • Playback survives the screensaver — leaving the TV long enough for the screensaver no longer leaves you
    on a dead stream. A paused movie/episode is restored paused at the exact spot, and a live channel
    is re-tuned to the live edge, when you come back — instead of doing nothing until a manual reload.
  • Live TV no longer freezes with no recovery — some live streams stop advancing while the player still
    thinks it's playing (no buffering, no error), so the auto-reconnect never kicked in and the channel just
    hung. A new freeze watchdog detects the stalled picture and reconnects automatically.
  • No sound when opening a channel very fast — pressing OK on a channel a split-second before its preview
    loaded could carry the muted-preview state into full-screen, so the channel played silently. Full-screen
    now always plays with sound.
  • One corrupted file no longer breaks all playback — a malformed MP4 (broken UDTA metadata pointing to
    a multi-GB offset) sends FFmpeg's demuxer into a 3+ GB HTTP seek that blocks mpv's core thread. Previously
    this poisoned every subsequent video (even healthy ones wouldn't play until app restart). Now the video
    watchdog detects the stuck demuxer (no FILE_LOADED after 7s) and destroys+recreates the mpv instance
    entirely
    (the only way to abort a blocked HTTP read), showing a clear error for the bad file while every
    other video continues to play fine.
  • Audio/video drift on some movies — a few high-bitrate / high-frame-rate movies could play with the
    picture slightly behind the sound, because nothing was dropping the late frames on the direct hardware
    path. The player now drops late frames at the decoder so audio and video stay in sync.
  • Long-press to favourite in Movies and Series — long-press OK on any movie or series poster (grid or
    list view) to toggle it as a favourite. Same as the details-pane button, just faster — no need to focus
    into the details pane first. The existing star indicator still shows the current state.
  • Sync no longer wipes data on failure — old channels/movies/series are only cleared when the first new
    row is actually written, not at the start. If a sync fails completely (wrong password, network down,
    timeout), your existing content stays intact instead of vanishing. The Add Source screen now also
    remembers what you typed so a typo doesn't mean re-typing everything from scratch on the remote.
  • Sync times out fast instead of spinning forever — OkHttp connect/read/write timeouts are now 15/20/20s
    (down from 30/60/30s) and silent auto-retries are disabled. When the network drops mid-sync, the error
    dialog appears in ~20s instead of hanging for minutes. Category-by-category fallback also aborts on
    network errors (continues only for HTTP errors like 512) instead of retrying every category against a
    dead server.
  • M3U VOD entries now route to Movies — M3U playlists with type="vod" or tvg-type="movie" entries
    now create movie/stream rows in the Movie grid instead of being incorrectly filed under Live TV. The
    group-title becomes the movie category (e.g. "Movies", "Peliculas").
  • Offline banner now works on all devices — Android TV boxes whose Ethernet interface stays "up"
    forever (never fires network callbacks) now get a 20-second connectivity poll, so the banner actually
    appears when the internet is unreachable.
  • Profile dialog focus no longer escapes — the edit/create profile popup now uses a Popup window
    with focusable=true so D-pad stays inside the dialog instead of wandering out to the sidebar.
  • Two-stage video watchdog — broken files caught faster and more accurately: Stage 1 (T_OPEN, 10s)
    catches a demuxer that never opens the file; Stage 2 (T_DECODE, 7s) catches a decoder that opened
    the file but never produced a frame. Moov-at-end detection catches MP4s with trailing headers
    from servers without Range support (shows a clear error instead of retrying endlessly); END_FILE
    instant-catch
    aborts immediately when the demuxer rejects a malformed file outright. A thrash
    guard
    (3 consecutive hard-resets) prevents infinite tear-down/recreate loops on bad playlists.
    Added seekable=1 to VOD demuxer options so FFmpeg attempts HTTP Range requests even on servers
    that don't advertise byte-serving.
  • Guide shows programmes on first open — the EPG guide was blank until you navigated into a row (on large
    catch-up windows with a lookback), because the auto-scroll-to-now fired before the timeline layout was ready.
    The scroll now waits for layout, so programmes appear immediately. Note: if upgrading to v4.0.0 and the
    guide remains blank after this fix, delete the EPG sources and re-add them (Settings → EPG → Edit → delete,
    then add the feed again); v4.0.0's new batched EPG loader is incompatible with old cached data, and a fresh
    re-import ensures compatibility. Resync only after re-adding.

What's Changed

  • Our OWN home screen with continue watching support for OWN TV by @codeVerine in #31
  • Source, EPG sync resync performance overhaul. True backgorudn jobs support and much more. by @codeVerine in #40

Full Changelog: v3.2.0...v4.0.0

Don't miss a new OwnTV release

NewReleases is sending notifications on new releases.