Skip to content

Extreme InfiniTV v1.6.1

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Jun 23:03
· 0 commits to dcb90ecdd4c8e0865f585b758172615d6568a9ea since this release
29e5837

App Icon

Extreme InfiniTV v1.6.1 adds an experimental native Android video player with proper Picture-in-Picture and lock-screen controls, first-class macOS support, settings search, a configurable network timeout, a remembered external player on Android, and a radio-mode visualizer.

Changelog v1.6.1

New

  • Experimental native Android video player. An opt-in second Android backend (off by default) that hands the whole playback session to a native ExoPlayer-backed Activity instead of the in-WebView Video.js path. It brings:
    • Proper Picture-in-Picture - only the video surface goes into the PiP window, not the page chrome around it (closes #75).
    • MediaSession - lock-screen transport controls, Bluetooth headset / car-stereo play / pause / skip, and notification controls.
    • Hardened HLS via media3-exoplayer-hls for the long tail of provider quirks (mixed-codec renditions, ad-insertion gaps, mid-playlist track changes).
    • In-Activity live TV channel switching - D-pad up reveals an overlay channel list; D-pad left / right or the remote channel keys flip channels without leaving the player.
    • Enable it under Settings > Android native player (shows an "Experimental" pill). Movies, series, and Live TV all intercept before mounting the in-WebView player when it's on; resume position, recents, and series "Up Next" stay in sync via the existing preferences store.
  • First-class macOS support.
    • External-player integration: a configured .app bundle (e.g. /Applications/VLC.app) is resolved to its real executable, launched via open -a, and reuses an already-running instance instead of spawning a duplicate.
    • Reliable fullscreen: the video.js / artplayer fullscreen controls drive the native Tauri window (the HTML5 Fullscreen API is unreliable inside the macOS WebView), with the custom title bar collapsing while fullscreen.
    • Native HLS playback through AVFoundation rather than hls.js.
  • Settings search. An inline filter on the settings page indexes each section title and card at mount (re-indexed on locale change) and hides cards, sections, and sidebar links that miss the query (AND match across tokens). Platform-hidden cards are skipped so search never surfaces something you can't use.
  • Configurable network timeout. A new Network setting with discrete steps - 20s / 45s / 90s / 180s (default 20s) - replaces the hard-coded 20s provider-fetch timeout that was too aggressive for slow Xtream servers and ad-hoc M3U mirrors over patchy mobile networks. The Xtream per-mirror failover budget honours the same value. Full 16-locale coverage. Fixes #84.
  • Remembered external player (Android). Tick "Always use this app" in the player picker and the choice is stored and reused - the "Open in player..." button then launches it directly, skipping the picker. A new Settings card shows the current default with a "Forget" button; an uninstalled pick is dropped automatically and the picker returns. Closes #80.
  • Radio-mode visualizer. A single-line oscilloscope for audio-only (radio) live streams: an accent-colored waveform on /livetv that drives an accent glow around the canvas. Gated off under both reduced-motion and performance mode.
  • "Restore from backup" on the welcome screen. A returning user on the empty / logged-out state can import a backup JSON without first adding a playlist.

Improved

  • Picture-in-Picture polish for the in-WebView path (for users who don't opt in to the native backend). Auto-PiP now binds at the player handle returned by mountPlayer instead of the raw <video> element, so it survives the element being destroyed and recreated on every channel switch. A fill bridge CSS-promotes the video to cover the viewport during system-driven auto-PiP (which lacks the user activation the Fullscreen API needs), wired across /livetv, /movies/detail, and /series/detail with cleanup on navigation.
  • Provider fetches always route through the Tauri HTTP plugin under Tauri, not only when a custom user-agent is set. Requests always send a User-Agent (the custom one if set, otherwise a real browser UA), so the reqwest/x.y default never reaches providers that block it, and plain-HTTP providers work on platforms where the WebView fetch couldn't reach them.
  • Shared, cross-platform "Restore from backup" picker. The file picker that branches across Android SAF -> Tauri dialog -> web <input type=file> and then parses + imports the JSON now lives in one shared module used by both the Settings page and the welcome card, instead of being hand-rolled per call site.
  • Stream-diagnostic dialog layout. The "Test stream" dialog now uses a fixed height instead of a max-height so it no longer collapses around short results.
  • Close-to-tray toggle accessibility. The desktop close-behavior control is now a proper role="radio" radiogroup (aria-checked + aria-describedby) instead of paired toggle buttons.

Fixed

  • macOS "no internet" on launch (#85). Info.plist now declares NSAppTransportSecurity -> NSAllowsArbitraryLoads, so macOS builds stop blocking plain-HTTP Xtream / M3U provider traffic by default.
  • Settings page failing to boot on Tauri Android. An orphan syncConnectionLimitBanner() call left over from the 1.6 connection-limit-banner componentization threw on Android and blocked the page from loading.
  • Redundant live-TV startup fetch. Live TV now reuses the initial stream URL when present instead of re-resolving via the catalog, so direct-launch entry points (deep links, recents) skip an extra fetch.

Under the hood

  • Window-fullscreen capability added to src-tauri/capabilities/default.json (allow-set-fullscreen / allow-is-fullscreen) - this is what lets the macOS player drive the native window into and out of fullscreen.
  • New Vitest coverage: tests/android-video-launcher.test.ts (bridge presence, argument forwarding, error swallow, channel-list JSON serialization, subscriber lifecycle) and tests/channel-lite.test.ts (default fallbacks, per-channel UA override, EPG "Now: ..." label resolution, JSON round-trip), plus macOS argv assertions added to tests/player-runtime.test.ts.
  • AndroidVideoBridge + AndroidPipBridge.setAutoEnter typings added to src/types/globals.d.ts.
  • Settings-card polish: dropped a redundant enter animation on the remembered-player card (the parent already has the shared entry treatment), tidied helper texts, and refined the Android-native player overlay layout and theme strings across all 16 Android locales.
  • Docs: external-players.mdx updated to cover the remembered-pick flow.
  • Tooling: mise.toml now pins node = "latest" alongside the existing toolchain.
  • Version stays at 1.6.1 in package.json and tauri.conf.json (an earlier 1.7.0 bump was reverted as the scope no longer warrants a minor bump).

Downloads

Pick the file that matches your device. Click a filename to download it directly. The Microsoft Store and Google Play buttons below are the easiest path on Windows and Android.

Platform File
Windows 10/11 (recommended installer) Extreme InfiniTV_1.6.1_x64-setup.exe
Windows (MSI alternative) Extreme InfiniTV_1.6.1_x64_en-US.msi
macOS (Apple Silicon + Intel) Extreme InfiniTV_1.6.1_universal.dmg
Linux Debian / Ubuntu / Mint extreme-infinitv_1.6.1_amd64.deb
Linux Fedora / openSUSE / RHEL extreme-infinitv-1.6.1-1.x86_64.rpm
Linux portable (any distro) extreme-infinitv_1.6.1_amd64.AppImage
Android sideload (APK) Extreme InfiniTV_1.6.1.apk
What about the .sig files, latest.json and the macOS .app.tar.gz?

You can ignore them.

  • *.sig and latest.json are used by the built-in auto-updater to verify each download is genuinely signed. The app downloads them on its own when checking for updates.
  • Extreme InfiniTV_universal.app.tar.gz is the macOS update bundle consumed by the same updater. For a fresh install on macOS, use the .dmg instead.
  • The .aab file is uploaded to Google Play and is not meant for sideloading. Use the .apk to install manually.
macOS: "Extreme InfiniTV.app" cannot be opened / "Apple could not verify..."

The macOS build is not yet notarized by Apple, so Gatekeeper blocks it on first launch. After dragging the app from the .dmg into /Applications, remove the quarantine flag from a Terminal:

xattr -dr com.apple.quarantine "/Applications/Extreme InfiniTV.app"

Then open the app normally. You only need to do this once per install.

Get it from Microsoft