应用不含任何频道或订阅,必须自备 Xtream 登录、M3U 或 Stalker 门户;构建时需选对 standard(arm)或 x86_64 变体,否则原生播放器无法加载;源码构建依赖独立的 OwnTV_Core 仓库,由 Gradle 从公共 Maven 自动拉取。

OwnTV
ahXN00GPL-3.0活跃维护面向 Android TV 的原生 IPTV 播放器,支持 Xtream、M3U、Stalker 门户和 EPG 节目单,还能回看与下载,用 ExoPlayer 加 mpv 双引擎播放。
Native Android TV IPTV player — Kotlin, Compose for TV, ExoPlayer + mpv. Xtream, M3U and Stalker portals, EPG, catch-up TV, profiles and downloads.
从 Releases 下载 APK:https://github.com/ahXN00/OwnTV/releases/latest/download/OwnTV.apk
或 adb install OwnTV.apkREADME 未说明显存或 CPU 要求;仅支持 Android TV(leanback 启动器、遥控器优先),最低 Android 8.0 / API 26。发布包分 arm 版(电视盒子)与 x86_64 版(模拟器及少数 Intel 盒子),原生播放器只在 ABI 匹配时加载。
原生 Android TV IPTV 播放器,自带 Xtream、M3U、Stalker 源,双播放引擎兼顾兼容与秒开
面向 Android TV 的原生 IPTV 播放器,支持 Xtream、M3U、Stalker 门户和 EPG 节目单,还能回看与下载,用 ExoPlayer 加 mpv 双引擎播放。
核心能力
- libmpv 与 ExoPlayer 双引擎,自动回退且可按频道覆盖
- 支持 Xtream、M3U(URL 或本地文件)与 Stalker/Ministra 门户
- XMLTV 节目单、7 天回看与直播倒带
- 最多四路 Multiview 同屏,仅一路出声
- 多配置文件隔离收藏与进度,支持 PIN 锁和儿童模式
容易踩的坑
- v5.2.2OwnTV v5.2.2最新正式版2026-11-09 · 2026-11-09 13:38 UTC
✨ New features
- ⚡ Search: the poster backdrop is blurred once, and blurred on Android 11 and older too (community PR #268 by @sarmadsoomro)
- 🖼️ More posters kept in memory, so Home scrolls cleaner (community PR #267 by @sarmadsoomro)
- 📺 Smoother TV Guide scrolling (community PR #266 by @sarmadsoomro)
- ✨ Clean channel names: a Names option on each playlist (community PR #283 by @Kevsosmooth)
- 📋 EPG Sources: Move up / Move down set the guide priority (community PR #277 by @Kevsosmooth)
- 🎯 Guide offers Auto-match when an added guide matches no channel (community PR #316 by @arch-fan)
- ⏪ Rewind mark in the TV Guide; Resync now in the playlist menu (community PR #305 by @sarmadsoomro)
- 🎛️ Player buttons: choose what OK does, swap channel up/down, number keys on or off (community PR #287 by @Kevsosmooth)
- 🚀 Start on the last channel in the TV Guide or Live TV (community PR #294 by @Kevsosmooth)
- 🏷️ Menu labels: off, when focused or always (community PR #280 by @Kevsosmooth)
- 🎤 Voice search on the Search screen (community PR #281 by @Kevsosmooth)
- 🔒 Lock a category with its own category lock PIN (community PR #273 by @Kevsosmooth)
- 🔐 Settings › App › Settings lock: a PIN of its own per profile, optionally for long-press changes too (community PR #286 by @Kevsosmooth)
- 🛡️ Protected profiles: new profiles, backups, restores and profile edits respect profile and Settings locks
- 🔀 Restore: a profile with the same name asks Merge, Replace or Keep both
- 👤 Local sync syncs the profile in use with the one in use on the other device
- 🔁 Local auto-sync: paired devices keep each other in step by themselves, with what each one allows (community PR #306 by @igebara)
- 👂 Keep auto-sync listening, as a switch (off by default)
- 🪟 Picture-in-picture when leaving the app (community PR #278 by @Kevsosmooth)
- 📺 Live TV: the preview keeps playing while you browse the categories (community PR #270 by @Kevsosmooth)
- 🔑 Stalker portals: an optional username and password
- 🏆 Sports: Scores | Calendar | Leagues tabs
- 📅 Sports Calendar: the month of every followed league, with the day's matches
- 🗂️ Sports Leagues: tables, fixtures and results; F1 drivers, constructors and races; tennis rankings
- 👕 Team pages: fixtures, results, next match, last five and table place
- 🆕 54 more leagues, with Volleyball and Lacrosse
- 🔄 Calendar refresh setting
- 📚 Home says the library is still loading, with the titles so far (community PR #333 by @DevenP)
- 🧭 The menu widens in place from its capsule, at a steady height (community PR #328 by @DevenP)
- 🏷️ Home rows show their heading when focus enters them (community PR #332 by @DevenP)
- 👁️ Long-press menus: hide actions, and the default order matches the menus
- 📺 Hide All channels or Catch-up from the Live TV categories (#322) (community PR #337 by @sarmadsoomro)
- ⬇️ Allow downloads per profile; a whole show or season asks first with the episode count (#339)
- 📅 TV Guide: catch-up channels show their past days from the provider's archive (community PR #324 by @Zangetsu-Sama)
- ⏮️ "Start of the programme" first in "Go back to…" (community PR #326 by @Zangetsu-Sama)
- 🖼️ Aspect: a press steps to the next mode, hold OK for the list (#319)
- 🎞️ Auto frame rate: separate switches for films and series, and Live TV (#318)
- 🔓 Ignore connection limit, per playlist (#244)
- 🔀 Sources: switch to another version of the channel playing (community PR #317 by @Aaronnn17)
- ⏻ Auto start on boot and on wake-up (community PR #279 by @Kevsosmooth)
- 📱 Edit a playlist from another device (#250)
- 🧭 TV Guide follows Live TV's category, as a switch in Browsing & lists (community PR #325 by @Zangetsu-Sama)
- 👤 Each profile remembers its own last category and channel
- **👆 OK previews first, then full screen: a sw
- v5.2.1OwnTV v5.2.12026-10-21 · 2026-10-21 16:45 UTC
查看更新说明
✨ New features
- 📺 TV Guide: OK brings a channel into the preview, OK again watches it — scrolling no longer changes the preview (#300)
- 🎧 Audio delay for each output: HDMI, soundbar, Bluetooth, speakers, headphones
- 🎚️ FFmpeg audio for ExoPlayer, as a switch (off by default)
- 🌗 Prefer SDR when a stream offers both (replaces the HDR switch)
- 💡 A hint to try MPV when a live channel keeps dropping frames
🐛 Fixes
- Live H.264 channels no longer freeze or drop frames on some TVs (#284)
- Auto frame rate tells 59.94, 29.97 and 23.976 from 60, 30 and 24, also for films that do not state theirs (#292)
- Each playlist keeps its own category order (#297)
- A re-sync with many custom-category items finishes, instead of locking the database (#288)
- Auto frame rate goes back to the normal mode when a channel has no matching one
- Full frame rate on mpv for H.264 above 30 fps, and after zapping from a 25 fps channel
- H.264 catch-up stays on hardware decoding on mpv
- A saved channel plays again after the TV wakes from standby
- TV Guide search: typing goes into the search field
- "Learned stream fixes" removed: catch-up no longer stays on software decoding for two weeks
- No sound or picture left playing under a live error screen
- Switching channels on mpv no longer holds up the screen
- v5.2.0OwnTV v5.2.02026-10-17 · 2026-10-17 20:13 UTC
查看更新说明
✨ New features
- 🏆 Sports: a new section with live scores, today's and tomorrow's matches, and match pages
- 🔎 Find channels: the channels in your guide that show a match, ranked, with a preview
- 📺 Broadcasts tab, venue and round on every match page
- 🏷️ Pick several sports and leagues at once on the Sports page
- ↕️ Hold OK to put your sports and leagues in your own order
- 🏠 Sports row on Home with a LIVE mark
- ⚙️ Settings → Sports: leagues, auto rebuild, live refresh, playlist and strict channel filters
- ↩️ Restore a category, or the playlists shown, to the playlist default (community PR #235 by @tvdev-android)
- 🔄 "Stream interrupted. Reconnecting…" while a live channel recovers (community PR #237 by @tvdev-android)
- 🖼️ Title art in Home's trending banner
- 📊 Progress bars on series posters
- ⏩ Page jumps in the channel list while watching (CH+/CH−, long press for first/last)
- 🎞️ Guide video preview on/off switch (Order ▾ › Show)
- 🎨 The player's channel list, history and categories in the Stage design
- ⭐ Favorites, Recently watched, Catch-up and All channels in the player's category list
- ⭐ Favourite movies and series rows on Home
- 🔎 Search finds TV programmes by title (On TV)
- ⏰ Schedule recording… on a channel: pick the day, start and end (#2)
- ⏹️ Stop recording from the channel's menu
- ☀️ Light theme across the whole app (Theme: System / Dark / Light)
- 🗓️ Auto-match EPG says when it has finished, even away from the Guide (community PR #251 by @camchis)
- 🔐 ClearKey channels whose playlist carries the key itself play
- 🔎 Search filter buttons: Live TV, TV Shows, Movies, Series
- 🎞️ Software decoding above 1080p (Video player switch)
- ⚡ Faster downloads over several connections
- 💬 A failed download says why
- 📺 Watch or keep downloading on a one-stream playlist
- 🗂️ Downloads and recordings whose file is gone say "File missing"
🐛 Fixes
- ↕️ Move opens straight from a category's menu and moves as many items as you like before Save
- 🌍 Channels named "UK: …" or "IT: …" get their country and language, like "UK| …"
- 🧹 Find channels leaves out playlist divider rows and other matches' event channels
- 📺 Broadcasts lists one channel per row, by country
- 🎨 Every popup, menu, form field and player control in the current design
- 📏 Multiview tile and category menus at the same size as every other menu
- 🖼️ Your own picture can be chosen while creating or editing any profile
- 📺 Series no longer show "No episodes" when one episode is oddly written by the provider
- 💬 A series the provider refused says why instead of "No episodes"
- 📺 Live TV falls back to the other player and gives up on time again
- 🔊 Opening a previewed channel keeps its volume; unmute returns to the level before
- 🔈 Changing sound settings during a film no longer starts a second copy
- 🗣️ Audio language and the episode queue survive a reload
- 🚫 A dead film link shows its error in seconds
- 🕒 Catch-up time zone "Automatic" uses the playlist's own zone
- ⏪ M3U catch-up and Xtream rewind start at the right moment
- ▶️ External player starts where you left off
- 🏷️ Categories keep their country ("UK|") when a list mixes countries
- ✏️ Bulk rename and ✨ Auto cleanup for categories
- 🔁 Retry works after a live channel gives up
- 👤 "Account already in use" says so, instead of loading forever
- 🔍 ◀ from a search opens the categories, with or without results
- 🌙 Home and the screensaver bring back the episode queue
- 🔤 Hebrew and Arabic subtitles read right to left on every line (#259)
- 🎯 ▶ into a page that is still opening no longer does nothing (community PR #264 by @Kevsosmooth)
- ⌨️ Settings search from More opens the keyboard on the first OK
- **▶️ External player picker offers Always aga
- v5.1.0OwnTV v5.1.02026-10-04 · 2026-10-04 09:55 UTC
查看更新说明
✨ New features
- 🎨 A completely new interface
- ⚙️ Settings rearranged into twelve groups
- ⏪ Resume a saved channel: ask, always or never
- 🗂️ Remove a channel from a custom category
🐛 Fixes
- Catch-up that shows no picture no longer reports a fast-start error (#229)
- Faster channel switching on providers that mix HLS and TS channels
- Custom categories in the player's channel list and the Multiview picker
- Hiding a provider category no longer empties custom categories
- Category search kept after watching a channel
- Left always returns to the rail
- Channel logos in the player's channel list match Live TV
- Brand accent, Subtitle style and DNS presets found by Settings search
- Play in external player finds VLC and MX Player on Android 11 and newer
- v5.0.4OwnTV v5.0.42026-09-26 · 2026-09-26 19:27 UTC
查看更新说明
🐛 Fixes
- Right from a category no longer gets stuck in Live TV, Movies and Series
- Returning to the categories lands on the open category
- Right from the categories reaches the search box when a list is empty
- Crash on the first launch after an update
- Cinematic category panel can go down to 10%
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
OwnTV is a native Android TV IPTV player, built with Kotlin and Jetpack Compose for TV. It runs two playback engines — libmpv (FFmpeg) for the widest compatibility, ExoPlayer (Media3) for near-instant Live TV — and it is a player only: you bring your own Xtream login, M3U playlist (URL or a local file) or Stalker/Ministra portal.
⚠️ OwnTV ships no channels, playlists, subscriptions or streams. You are responsible for the sources you add.
Open source, GPLv3, original code, built with the help of AI. Android TV only — leanback launcher, D-pad first.
📖 New here? User Guide →
Every feature, where to find it, and the remote shortcuts — on one page.
💬 Community
Questions, ideas, bug reports — join the OwnTV Telegram group:
👉 t.me/owntvplayer
✨ Features
🎬 Playback
- Two engines — mpv for compatibility, ExoPlayer for instant Live TV, with automatic fallback and a per-channel override
- 4K HDR direct rendering, optional auto frame-rate matching, surround sound with a stereo safety net, 150% volume boost
- Subtitles — text, image and closed captions, plus OpenSubtitles search and local files
- Resume, next-episode auto-play, mini-player/PiP, picture-in-picture when you press Home, audio-only mode, live stream-info overlay
- Media-session transport keys and proper audio focus — it behaves like a TV app
- An error log you can export for any stream that misbehaves
🧭 Browse
- Home with Continue Watching and Now Trending (TMDB rankings matched to what your provider can actually play)
- Live TV · Movies · Series · Downloads · Guide, with per-profile row order, Favorites, History and search (voice search where the TV has a speech recogniser)
- Multiple playlists at once, with provider labels everywhere they could be confused
- Rename, hide, reorder and combine categories; bulk rename rules
- TMDB posters, plots, cast and trailers in 40 languages — scales to ~50k channels / ~168k movies
- Two layouts for Movies & Series — the classic three panels, or Cinematic: the focused title's artwork full-bleed behind the whole screen, with its details and cast above a wide poster grid
- Adjustable panel widths per section, including hiding the preview pane entirely
📥 Sources & EPG
- Xtream, M3U and Stalker/Ministra — add any of them from your phone over Wi-Fi (QR + PIN)
- TV Guide (XMLTV) with a live Now marker, multiple guide sources and automatic channel matching
- Catch-up TV up to 7 days, live rewind, and Go back to… even for channels with no guide
- Guide time offset, per-source guide logos, per-channel EPG fixes
- Protected (DRM) channels — Widevine and ClearKey, read from the playlist, nothing to configure
- Custom DNS (Google, Cloudflare, Quad9, DoH or your own)
⏺️ Recording & Multiview
- Record live TV from the guide, the channel list or while watching — including every showing of a programme
- Multiview — up to four channels at once, with one carrying the sound
- OwnTV measures how many streams your provider allows and warns before it refuses one
👥 Profiles & Downloads
- Multiple profiles with their own favourites, history and resume points, PIN locks and a Kids mode; lock single categories behind a PIN, and optionally Settings too
- Per-profile startup: Home, last channel, the last channel in the TV Guide or Live TV, Favorites, or one chosen channel
- Offline movies and episodes with pause, resume, retry and a storage bar
🎨 Look & robustness
- Your own accent colour and focus highlight, frosted Glass with adjustable opacity, and a Stage, Picture or Plain background
- Dark and Light themes (or follow the TV) across the whole app, the player included
- Font sizing for the interface and for popups, independently
- Remote Shortcuts — map spare colour, number, channel and media keys to 26 actions; Player buttons choose what OK and a held OK do in the player, swap channel up/down, and turn number keys off
- Menu labels — the section names beside the menu icons: off, when focused, or always
- 26 interface languages, RTL-aware, chosen before anything else on a fresh install
- Backup & Restore to a single
.ownfile, optionally encrypted, locally or over Wi-Fi - Set up from another device — a new box copies everything from the OwnTV device you already have over your own Wi-Fi, offered on the first setup screen rather than buried in the menus
- In-app updates; memory-safe lists, auto-reconnect and offline detection throughout
📸 Screenshots
More in extras/screenshots/.
🧱 Tech stack
| Area | Choice |
|---|---|
| Language | Kotlin 2.4.20 (no kotlin-android plugin) |
| Build | AGP 9.4.0 / Gradle 9.8.2, KSP2 2.3.11, JDK 25 |
| UI | Jetpack Compose for TV (androidx.tv:tv-material 1.1.0), Compose BOM 2026.08.00 |
| Media | libmpv (FFmpeg) · ExoPlayer/Media3 1.11.1 |
| Database | Room 2.8.5 + Paging 3.5.1 + FTS4 |
| DI · Network · Images | Koin 4.2.2 · OkHttp 5 · Coil 3.6.0 |
minSdk 26, targetSdk 36, compileSdk 37, applicationId tv.own.owntv.
Build note: there is no
kotlin-androidplugin. AGP 9 ships its own Kotlin, but the Compose compiler plugin pulls the Kotlin Gradle plugin up to thekotlinversion ingradle/libs.versions.toml— that is what compiles the app, so keep the Compose compiler plugin on exactly that version. KSP versions independently and does not have to match it.
⚙️ How it works
- Parsing & sync — M3U is line-streamed and Xtream JSON is read with
JsonReader, so a huge provider payload is never fully buffered. Refresh is chunked, cancellable and reports progress. - Storage — a 27-entity Room schema with FTS4 search; Paging 3 with a bounded size keeps memory flat across 50k-item lists.
- EPG — XMLTV is stream-parsed (gzip-aware) into a rolling window and pruned.
- Player — two engines behind one
PlaybackEngineinterface, with a four-rung fallback ladder. Live promotes the running preview straight to full screen with no reload. - DI — Koin modules.
Project layout
This repository is the Android TV app. Everything underneath it — database, sync, parsers, EPG, backup, settings storage, the playback engines and every translated string — is a separate core library, shared with the OwnTV Mobile app for phones and tablets.
OwnTV/ (this repo)
tv.own.owntv/
├── player/ the TV player HUD, surfaces and mini-player
├── ui/ theme + reusable components
├── features/ setup, shell, live, movies, series, search, downloads, epg, profiles, settings
└── di/ Koin modules
OwnTV_Core/ (separate repo, published as tv.own.owntv:core / :player-core)
├── core/ database, network, parsers, Stalker, repository, sync, strings
└── player-core/ libmpv + ExoPlayer engines, fallback ladder, watchdogs, diagnostics
OwnTV_Mobile/ (separate repo, the phone and tablet app on the same core)
Related repositories
- 📱 OwnTV Mobile — the phone and tablet app, built on the same core.
- 🧩 OwnTV Core — the shared engine both apps run on.
📚 Docs (extras/)
- 📖 User Guide — every feature and where to find it.
- 📄 Master Product Brief — the full as-built feature and architecture reference.
📥 Installing (Fire TV / Android TV)
Grab the signed APK from the latest release. This link always points at the newest build:
https://github.com/ahXN00/OwnTV/releases/latest/download/OwnTV.apk
- Fire TV — install Downloader (by AFTVnews), then enter code
4308278. Enable Apps from Unknown Sources if prompted. - Android TV / Google TV — Downloader is on Google Play too, so the same code works. Or sideload
with Send files to TV, a USB drive, or
adb install OwnTV.apk.
Install only from this repository's Releases. Each release ships two APKs:
OwnTV.apk(arm — every real TV box, and what the Downloader code fetches) andOwnTV-x86_64-vX.X.X.apk(emulators and rare Intel boxes).
🛠️ Building & running
Only if you want to build from source — otherwise just install the APK.
Half the app lives in the separate OwnTV_Core repository; Gradle downloads it from OwnTV's public Maven repository by itself — no account or token needed.
- Get the code —
git clone https://github.com/ahXN00/OwnTV.git(or download the ZIP). - Open it in Android Studio and let Gradle sync.
- Pick the build variant —
standardfor real devices and arm emulators,x86_64for x86_64 emulators. This matters: the native player only loads on a matching ABI. - Run ▶. Minimum Android 8.0 / API 26.
Command line: ./gradlew assembleDebug (gradlew.bat on Windows). The APK lands in
app/build/outputs/apk/.
Tested on a real TCL Google TV and the Android Studio emulator (Android TV and Google TV images).
🤝 Contributing
Contributions, bug reports and ideas are welcome — open an issue or a pull request. Please keep the project's player-only, bring-your-own-source positioning and match the existing code style.
Help translate OwnTV
If your language is already available, contribute interface translations across OwnTV's six Android resource components on Hosted Weblate. If it is not listed, open a language request ticket first. A maintainer will review the request, register the locale, and prepare its base translation files on Hosted Weblate. Once the language appears on Hosted Weblate, you can start translating it there. The strings themselves live in OwnTV's core library repository, together with the language contributor guide covering identifiers, validation, and promotion policy.
🙏 Credits
OwnTV speaks 26 languages because people translate it on Weblate, which hosts the project free of charge for libre software. Thank you to Weblate and to every translator who has given the app their language.
Movie & series metadata and trailers are provided by TMDB. This product uses the TMDB API but is not endorsed or certified by TMDB.
Subtitle search & download is powered by OpenSubtitles.com. This product uses the OpenSubtitles API but is not endorsed or certified by OpenSubtitles. You sign in with your own OpenSubtitles account and are subject to their terms and download quotas.
🎨 Brand
The lowercase owntv wordmark was designed for OwnTV by @m3th0d93 in issue #227.
▶️ Playback engines
- mpv (via libmpv, built on FFmpeg) — the default engine, for the widest IPTV/codec, audio and HDR support.
- Media3 / ExoPlayer — the fast-start engine for Live TV preview and HLS.
Which of the two starts a stream is yours to set, separately for Live TV and for Movies & Series (Settings → Player): either order, or one engine only with the automatic handover turned off.
🧩 Built with
Jetpack Compose for TV · Room · Koin · OkHttp · Coil · ZXing — and the wider Kotlin / AndroidX open-source ecosystem. Thank you to all their maintainers. See each project for its own license.
⚖️ Legal
OwnTV is a media player only. It ships with no channels, playlists, subscriptions, or content, and does not endorse or facilitate access to unauthorized streams. Users are solely responsible for the sources they add and for complying with the laws and rights that apply to them.
📄 License
Released under the GNU General Public License v3.0 (GPLv3) — see LICENSE.
In short: you're free to use, study, modify, and redistribute OwnTV, including commercially — but any redistributed version (including forks and commercial products built on it) must also be licensed under GPLv3 and its source made available.
OwnTV is an open-source, player-only project, built with the help of AI.