macOS 版本未经 Apple 公证,首次启动需执行 xattr -dr com.apple.quarantine 移除隔离标记;Windows/Linux 首次 Tauri 构建需联网下载并校验 FFmpeg sidecar;TMDB 元数据需自备免费 API Key 并在设置中填写。
Extreme-InfiniTV
infinitel8pGPL-3.0活跃维护跨平台 IPTV 播放器,支持 Xtream Codes 和 M3U/M3U8 播放列表,带电视遥控器操作、EPG 节目单和离线下载,覆盖 Windows、macOS、Linux、Android 及电视端。
Cross-platform IPTV player for Xtream Codes and M3U/M3U8 playlists. TV remote support, EPG, and offline downloads. Windows, macOS, Linux, Android and TV - on Microsoft Store, Google Play and Snap Store.
sudo snap install extreme-infinitv
winget install --id 9NN162Z0WXSR --source msstoreREADME 未说明显存或 GPU 要求;支持 Windows、macOS(Apple Silicon 与 Intel)、Linux、Android 手机/平板/Android TV/Fire TV,以及 Raspberry Pi 4/5 的 64 位系统。
跨平台 IPTV 播放器,统一接入 Xtream Codes 与 M3U 播放源,支持电视遥控操作
跨平台 IPTV 播放器,支持 Xtream Codes 和 M3U/M3U8 播放列表,带电视遥控器操作、EPG 节目单和离线下载,覆盖 Windows、macOS、Linux、Android 及电视端。
核心能力
- 自动识别 Xtream Codes 凭据、M3U 链接或本地播放列表
- 直播频道支持分类筛选、搜索与内嵌 EPG 节目单
- 支持回看与直播时移,可暂停和回退到直播点之后
- 内置播放列表编辑器,可重排分组、改名改号并导出 m3u
- 粘贴网页地址自动嗅探 HLS/DASH 流并多选清晰度
容易踩的坑
- v2.0.0-beta.75Extreme InfiniTV v2.0.0-beta.75 (beta)pre-release最新正式版2026-11-05 · 2026-11-05 11:56 UTC
Automated beta build from
release/2.0.0@90e1cbc.Android versionCode:
200000075(TV:200004575)Commits since
v1.9.0- fix(android): local M3U file picker fallback and TV backup export (
90e1cbc) - ci: pin @tauri-apps/cli to 2.12.2 until rpm bundling accepts prerelease versions (
137bce3) - chore: update node version to 24 in workflow files and package.json (
fd7ae0f) - fix(sidebar): animate the brand-mark comet on the compositor instead of offset-path Closes #238 (
e9ccf8e) - bump deps (
19f23c1) - fix(subtitles): size cues from the video height and add a Huge step Fixes #236 (
dabb374) - fix(vod): land seeked remux mounts on the right timeline and keep the player off the old stream's end (#234) (
57e9cf6) - feat(subtitles): size and delay on the TV playback sheet, Settings rows and backup (#236) (
92b2043) - feat(android): subtitle size and delay in the native player (#236) (
d08a451) - feat(subtitles): open the Subtitles dialog from inside the players so it works in fullscreen (#236) (
3837365) - feat(subtitles): subtitle size for every embedded player and a delay that survives remounts (#236) (
7c34b5e) - refactor(livetv): pull the per-tune UA into a tested helper (
e842f33) - fix(livetv): send a fresh UA per HLS tune so a quick return isn't 403'd (#235) (
44fd381) - refactor(player): key the iina-cli option rewrite on the launch kind, not the binary name (
beb75f1) - feat(player): IINA as an external player on macOS (#233) (
a5eb199) - fix(vod): keep a seek target through the remux re-register instead of snapping back (#231) (
57efdf7) - feat(epg): programme search across the active category, catch-up window and upcoming schedule (#228) (
4014803) - ci: don't fail the i18n key check when the PR comment can't be posted (
2f22b4d) - fix(livetv): retry a 403 on a quick return to a channel instead of giving up (#227) ([
4916595](https://github.com/infinitel8p/Extreme-InfiniTV/commit/4916595fa18a4f3b813b9d6
- fix(android): local M3U file picker fallback and TV backup export (
- v2.0.0-beta.74Extreme InfiniTV v2.0.0-beta.74 (beta)pre-release2026-10-28 · 2026-10-28 14:27 UTC
查看更新说明
Automated beta build from
release/2.0.0@137bce3.Android versionCode:
200000074(TV:200004574)Commits since
v1.9.0- ci: pin @tauri-apps/cli to 2.12.2 until rpm bundling accepts prerelease versions (
137bce3) - chore: update node version to 24 in workflow files and package.json (
fd7ae0f) - fix(sidebar): animate the brand-mark comet on the compositor instead of offset-path Closes #238 (
e9ccf8e) - bump deps (
19f23c1) - fix(subtitles): size cues from the video height and add a Huge step Fixes #236 (
dabb374) - fix(vod): land seeked remux mounts on the right timeline and keep the player off the old stream's end (#234) (
57e9cf6) - feat(subtitles): size and delay on the TV playback sheet, Settings rows and backup (#236) (
92b2043) - feat(android): subtitle size and delay in the native player (#236) (
d08a451) - feat(subtitles): open the Subtitles dialog from inside the players so it works in fullscreen (#236) (
3837365) - feat(subtitles): subtitle size for every embedded player and a delay that survives remounts (#236) (
7c34b5e) - refactor(livetv): pull the per-tune UA into a tested helper (
e842f33) - fix(livetv): send a fresh UA per HLS tune so a quick return isn't 403'd (#235) (
44fd381) - refactor(player): key the iina-cli option rewrite on the launch kind, not the binary name (
beb75f1) - feat(player): IINA as an external player on macOS (#233) (
a5eb199) - fix(vod): keep a seek target through the remux re-register instead of snapping back (#231) (
57efdf7) - feat(epg): programme search across the active category, catch-up window and upcoming schedule (#228) (
4014803) - ci: don't fail the i18n key check when the PR comment can't be posted (
2f22b4d) - fix(livetv): retry a 403 on a quick return to a channel instead of giving up (#227) (
4916595) - fix: respect hidden categories on Recently Added, Search and the recommendation rails (#229) ([
a4c4e59](https://github.com/infinitel8p/Extreme-InfiniTV/com
- ci: pin @tauri-apps/cli to 2.12.2 until rpm bundling accepts prerelease versions (
- v2.0.0-beta.70Extreme InfiniTV v2.0.0-beta.70 (beta)pre-release2026-10-24 · 2026-10-24 14:44 UTC
查看更新说明
Automated beta build from
release/2.0.0@57e9cf6.Android versionCode:
200000070(TV:200004570)Commits since
v1.9.0- fix(vod): land seeked remux mounts on the right timeline and keep the player off the old stream's end (#234) (
57e9cf6) - feat(subtitles): size and delay on the TV playback sheet, Settings rows and backup (#236) (
92b2043) - feat(android): subtitle size and delay in the native player (#236) (
d08a451) - feat(subtitles): open the Subtitles dialog from inside the players so it works in fullscreen (#236) (
3837365) - feat(subtitles): subtitle size for every embedded player and a delay that survives remounts (#236) (
7c34b5e) - refactor(livetv): pull the per-tune UA into a tested helper (
e842f33) - fix(livetv): send a fresh UA per HLS tune so a quick return isn't 403'd (#235) (
44fd381) - refactor(player): key the iina-cli option rewrite on the launch kind, not the binary name (
beb75f1) - feat(player): IINA as an external player on macOS (#233) (
a5eb199) - fix(vod): keep a seek target through the remux re-register instead of snapping back (#231) (
57efdf7) - feat(epg): programme search across the active category, catch-up window and upcoming schedule (#228) (
4014803) - ci: don't fail the i18n key check when the PR comment can't be posted (
2f22b4d) - fix(livetv): retry a 403 on a quick return to a channel instead of giving up (#227) (
4916595) - fix: respect hidden categories on Recently Added, Search and the recommendation rails (#229) (
a4c4e59) - fix(snapcraft): update architecture variable for webkit2gtk and library paths (
6bc3b50) - feat(subtitles): OpenSubtitles search and in-player subtitle selection (#226) (
9fad653) - fix(mpv): restart the embedded mpv session after the process dies (
7e8f0f8) - ci: build Linux desktop bundles on ubuntu-24.04 so the AppImage ships WebKitGTK 2.52.6 (
115a82f) - fix: harden CodeQL-flagged sinks ([
d224c14](https://github.com/infinitel8p/Extreme-Infi
- fix(vod): land seeked remux mounts on the right timeline and keep the player off the old stream's end (#234) (
- v2.0.0-beta.69Extreme InfiniTV v2.0.0-beta.69 (beta)pre-release2026-10-24 · 2026-10-24 14:15 UTC
查看更新说明
Automated beta build from
release/2.0.0@92b2043.Android versionCode:
200000069(TV:200004569)Commits since
v1.9.0- feat(subtitles): size and delay on the TV playback sheet, Settings rows and backup (#236) (
92b2043) - feat(android): subtitle size and delay in the native player (#236) (
d08a451) - feat(subtitles): open the Subtitles dialog from inside the players so it works in fullscreen (#236) (
3837365) - feat(subtitles): subtitle size for every embedded player and a delay that survives remounts (#236) (
7c34b5e) - refactor(livetv): pull the per-tune UA into a tested helper (
e842f33) - fix(livetv): send a fresh UA per HLS tune so a quick return isn't 403'd (#235) (
44fd381) - refactor(player): key the iina-cli option rewrite on the launch kind, not the binary name (
beb75f1) - feat(player): IINA as an external player on macOS (#233) (
a5eb199) - fix(vod): keep a seek target through the remux re-register instead of snapping back (#231) (
57efdf7) - feat(epg): programme search across the active category, catch-up window and upcoming schedule (#228) (
4014803) - ci: don't fail the i18n key check when the PR comment can't be posted (
2f22b4d) - fix(livetv): retry a 403 on a quick return to a channel instead of giving up (#227) (
4916595) - fix: respect hidden categories on Recently Added, Search and the recommendation rails (#229) (
a4c4e59) - fix(snapcraft): update architecture variable for webkit2gtk and library paths (
6bc3b50) - feat(subtitles): OpenSubtitles search and in-player subtitle selection (#226) (
9fad653) - fix(mpv): restart the embedded mpv session after the process dies (
7e8f0f8) - ci: build Linux desktop bundles on ubuntu-24.04 so the AppImage ships WebKitGTK 2.52.6 (
115a82f) - fix: harden CodeQL-flagged sinks (
d224c14) - feat: merged view across multiple playlists (#164) (
4253e03) - f
- feat(subtitles): size and delay on the TV playback sheet, Settings rows and backup (#236) (
- v2.0.0-beta.67Extreme InfiniTV v2.0.0-beta.67 (beta)pre-release2026-10-23 · 2026-10-23 20:12 UTC
查看更新说明
Automated beta build from
release/2.0.0@e842f33.Android versionCode:
200000067(TV:200004567)Commits since
v1.9.0- refactor(livetv): pull the per-tune UA into a tested helper (
e842f33) - fix(livetv): send a fresh UA per HLS tune so a quick return isn't 403'd (#235) (
44fd381) - refactor(player): key the iina-cli option rewrite on the launch kind, not the binary name (
beb75f1) - feat(player): IINA as an external player on macOS (#233) (
a5eb199) - fix(vod): keep a seek target through the remux re-register instead of snapping back (#231) (
57efdf7) - feat(epg): programme search across the active category, catch-up window and upcoming schedule (#228) (
4014803) - ci: don't fail the i18n key check when the PR comment can't be posted (
2f22b4d) - fix(livetv): retry a 403 on a quick return to a channel instead of giving up (#227) (
4916595) - fix: respect hidden categories on Recently Added, Search and the recommendation rails (#229) (
a4c4e59) - fix(snapcraft): update architecture variable for webkit2gtk and library paths (
6bc3b50) - feat(subtitles): OpenSubtitles search and in-player subtitle selection (#226) (
9fad653) - fix(mpv): restart the embedded mpv session after the process dies (
7e8f0f8) - ci: build Linux desktop bundles on ubuntu-24.04 so the AppImage ships WebKitGTK 2.52.6 (
115a82f) - fix: harden CodeQL-flagged sinks (
d224c14) - feat: merged view across multiple playlists (#164) (
4253e03) - feat: add AppRun seeding for AppImage bundler on Ubuntu (
f4430fd) - feat: add workflow artifact upload for mobile AAB to support manual Play Console uploads (
e0bfef6) - refactor: remove unused PluginManager binding logic from MainActivity (
8b9a904) - Update windows dependency to version 0.62 and add Win32_UI_Input_KeyboardAndMouse feature (
5ada868) - feat(epg): render the guide as one continuous multi-
- refactor(livetv): pull the per-tune UA into a tested helper (
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Screenshots
Desktop
Android TV (dedicated 10-foot interface, D-pad focus)
Phone (portrait, touch)
Features
- Any source, one UI. Sign in with Xtream Codes credentials, paste an M3U / M3U8 URL or a direct stream link, or load a playlist file from your device. The app detects the mode automatically.
- Live TV with category filtering, channel search, channel-number entry, a virtualised list, inline EPG (now / next / today), and automatic channel-logo fallback from iptv-org's logo collection when a provider doesn't supply one.
- Catch-up TV and replay. Replay programmes from your provider's archive and pause or rewind behind live, with a full-programme seekbar.
- Custom playlists built in a full in-app editor: pull channels from any playlist, reorder and group them, rename, renumber, find and replace, check links, and export as
.m3u. - Add a stream from any website. Paste a page URL and the app sniffs the network for playable HLS / DASH streams, with quality labels and multi-select.
- Movies (VOD) and Series library with poster grids, detail dialogs, season / episode navigation, mark watched / unwatched with a watched badge, an optional hide-watched filter, and a "Surprise me" random-title picker.
- TMDB metadata enrichment. Optional, bring-your-own free API key (Settings > Network): cast, director, and similar titles on movie and series detail pages.
- "Because you watched" recommendations on the home screen, plus similar-title suggestions on detail pages, both computed locally from category, cast, and director so they work even without a TMDB key.
- Search (
Ctrl+K) across channels, movies, and series, with recent searches you can revisit or clear. - Full schedule grid on the EPG page, with timezone-aware "all times local" rendering, custom EPG sources, and channel mapping.
- A player for everything. Three embedded engines (ArtPlayer, Video.js, Shaka) cover HLS, MPEG-TS, MPEG-DASH with ClearKey, and HEVC (with one-click install of the Windows HEVC extension). Picture-in-picture included.
- Embedded subtitles from MP4 files everywhere, plus MKV playback on desktop (remuxed on the fly through a bundled FFmpeg on macOS / Linux, and as a Windows fallback when WebView2 can't demux a file), with an option to turn captions on by default, audio track switching, and automatic audio repair for AC-3 / E-AC-3 / MP2 / DTS.
- External players. Hand any stream to MPV or VLC on desktop (with window reuse), or to any installed video app on Android.
- Multiple playlists, switchable from the sidebar without re-entering credentials, each with its own favorites, watchlist, progress, and health panel.
- TV-first navigation. Spatial focus (D-pad / arrow keys) is wired across the whole app via
spatial-navigation-polyfill. Hit targets, focus rings, and reflow tested for 10-foot UI, plus a TV safe-area setting for overscan and a collapsible desktop sidebar. - 16 languages including RTL (Arabic, Urdu), translated before first paint so there's no flash of English.
- Light and dark themes with seven accent colors, both first-class; each playlist can also override the accent (and add an emoji) so you can tell them apart at a glance. Honours
prefers-color-scheme,prefers-reduced-motion, andprefers-contrast. - Adjustable font scale (Small / Default / Medium / Large / X-Large) plus a responsive root size that scales the whole UI on 4K and 8K displays.
- Self-updating desktop builds (Windows NSIS and Linux AppImage) via the Tauri updater, signed with minisign and served from GitHub Releases, with stable and beta channels and a "What's new" dialog after each update.
- Backup and restore. Export playlists, preferences, and settings as one file and import them on another device.
- Offline-friendly persistence. Credentials and preferences live in the OS app-data dir on Tauri builds, with a localStorage / cookie fallback on the web build; clear your viewing history from Settings at any time.
- No tracking, no ads, no telemetry. The app collects nothing about you or your viewing habits. Outbound metadata lookups are limited to TheTVDB artwork and episode details (keyless, can be turned off in Settings) and the optional TMDB enrichment above with your own API key.
Install
| Platform | How | Updates |
|---|---|---|
| Windows (Microsoft Store) | apps.microsoft.com | Microsoft Store |
| Windows (sideload) | NSIS .exe (or .msi) from Releases | In-app auto-updater |
| macOS (Apple Silicon + Intel) | Universal .dmg from Releases | Update check in-app, download from Releases |
| Linux (Snap, most distros) | sudo snap install extreme-infinitv or Snap Store | Snap Store |
| Linux (Debian / Ubuntu / Mint) | .deb from Releases | Manual |
| Linux (Fedora / openSUSE / RHEL) | .rpm from Releases | Manual |
| Linux (any distro, portable) | .AppImage from Releases | In-app auto-updater |
| Raspberry Pi 4 / 5 (64-bit OS) | sudo snap install extreme-infinitv, or arm64 .deb / .AppImage from Releases | Snap Store / in-app (AppImage) |
| Android phone / tablet | Google Play | Play Store |
| Android TV / Fire TV | AFTVnews Downloader (see below), or Play Store on supported devices | Manual / Play Store |
| Web preview | Build with pnpm build and serve dist/ (no auto-update, no native features) | Manual |
Android TV / Fire TV
Sideload with the AFTVnews Downloader app. Open it, enter one of the codes below in the URL field, and install:
8281651(oraftv.news/8281651) - the full app, with the TV browse UI (Home, Live TV, Movies, Series, Search, Downloads, Settings). This is what most TV users want.1317634(oraftv.news/1317634) - the receiver-only kiosk build. No browse UI; it boots straight into a pairing screen and only accepts casts from your phone or desktop.
Both codes always resolve to the current stable release, so they keep working across updates. ADB (adb install Extreme-InfiniTV.apk) works too if you'd rather skip Downloader.
via winget
The Microsoft Store listing is federated through winget, so you can install without opening the Store:
winget install --id 9NN162Z0WXSR --source msstore
macOS: "Extreme InfiniTV.app" cannot be opened
The macOS build is not yet notarized by Apple, so Gatekeeper blocks it on first launch with a message like "Apple could not verify Extreme InfiniTV.app is free of malware". 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.
Develop
Requirements: pnpm (the package manager is pinned in package.json), Node 20+, the Rust toolchain (only for tauri commands), Java 21 and Android Studio for tauri:android. mise.toml pins the toolchain versions if you use mise.
pnpm install
pnpm dev # Astro + Svelte at http://localhost:4321
pnpm tauri dev # Native desktop shell (auto-spawns pnpm dev)
pnpm tauri:android # Android dev shell
On Windows and Linux, pnpm tauri dev / pnpm tauri build first download and checksum-verify a trimmed FFmpeg sidecar into src-tauri/binaries/ (run pnpm fetch-ffmpeg to do it manually). The first Tauri build therefore needs network access.
To test the dev server on another device on the LAN (phone, TV), set XTREAM_HMR_HOST to your machine's LAN IP so Vite advertises the right HMR host:
XTREAM_HMR_HOST=192.168.1.50 pnpm dev
Tests run with Vitest (pnpm test); ~55 suites in tests/ cover the parsers, serializers, catch-up math, codec hints, custom playlists, backup, and the playback proxies. Lint with ESLint flat config (pnpm lint / pnpm lint:fix); no Prettier. TypeScript is in strict mode (tsconfig.json extends astro/tsconfigs/strict); the @/* alias maps to src/*.
Community
- Discord - chat, help, and beta feedback.
- GitHub Discussions - questions and feature ideas.
- Issues - bug reports.
Credits
Copyright (c) 2025 Ludovico Ferrara.
License
Extreme InfiniTV is released under the GNU General Public License v3.0 or later. You are free to use, study, share, and modify it; any distributed fork or derivative must remain under the same license and ship its source.
The Windows and Linux desktop builds bundle a trimmed FFmpeg binary (LGPL v2.1) for the automatic audio fix. The full notice, source pointer, and build recipe are in the app under Settings > About > Open-source licenses.
The optional TMDB metadata enrichment uses the TMDB API with your own API key. This product uses the TMDB API but is not endorsed or certified by TMDB. Channel logos not supplied by your provider fall back to iptv-org's CC0 logo collection.