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.
Every feature, where to find it, and the remote shortcuts — on one page.
💬 Community
Questions, ideas, bug reports — join the OwnTV Telegram group:
✨ 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
.own file, 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-android plugin. AGP 9 ships its own Kotlin, but the Compose
compiler plugin pulls the Kotlin Gradle plugin up to the kotlin version in
gradle/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.
This is the beginning of the README. Read the rest at the original. Read the full README ↗