Open-source project
ahXN00/OwnTV avatar
ahXN00/OwnTV

OwnTV: a native Android TV IPTV player with two playback engines

Native Android TV IPTV player — Kotlin, Compose for TV, ExoPlayer + mpv. Xtream, M3U and Stalker portals, EPG, catch-up TV, profiles and downloads.

498 stars104 forksKotlinGPL-3.0

At a glance

What is it?
OwnTV is a GPLv3 Kotlin and Compose for TV IPTV player for Android TV that plays your own Xtream, M3U or Stalker sources. It ships no channels, and it is Android TV only.
Who is it for?
OwnTV suits people with an Android TV box, an existing Xtream, M3U or Stalker subscription, and a preference for D-pad navigation over a phone-style interface. It is the wrong tool for phones and tablets, for anyone who wants bundled channels, and for viewers who expect catch-up and EPG to work without adjusting time offsets or per-channel guide fixes.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly Kotlin, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 7, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A player with no content, aimed at the Android TV remote

OwnTV solves one problem: turning a provider subscription into something you can drive with a TV remote. The README is direct about the boundary. OwnTV ships no channels, playlists, subscriptions or streams, and the user is responsible for the sources added. That places it in the same category as other bring-your-own-source players rather than in the category of apps that bundle channel lists.

The target device is narrow on purpose. The repository describes the app as Android TV only, with a leanback launcher and D-pad-first navigation. The technical stack confirms it: Jetpack Compose for TV with the tv-material artifact, minSdk 26, targetSdk 36, compileSdk 37 and applicationId tv.own.owntv. A phone port would need a different UI layer, and nothing in the README suggests one exists.

Three source types are supported: Xtream logins, M3U playlists from a URL or a local file, and Stalker/Ministra portals. Multiple playlists can run at once, with provider labels shown wherever two sources could be confused. That last detail matters more than it sounds. Once you add a second provider, channel names collide constantly, and an app that does not label the source becomes unusable.

Two playback engines and the fallback between them

The interesting engineering choice is the pair of playback engines. OwnTV runs libmpv (FFmpeg) for compatibility and ExoPlayer (Media3 1.11.1) for near-instant Live TV. The README describes automatic fallback between them plus a per-channel override, so a stream that fails on one engine can be pinned to the other. The trade-off is honest: mpv handles more unusual stream formats, ExoPlayer starts faster. Neither wins everywhere, which is why both are present.

Parsing is built for large provider lists. M3U is line-streamed and Xtream JSON is read with JsonReader, so a huge provider response is not loaded into memory as one object. The README states the UI scales to roughly 50k channels and 168k movies, with TMDB metadata in 40 languages. Persistence uses Room 2.8.5 with Paging 3.5.1 and FTS4, which is the search index behind the channel and movie search.

Around playback sit features that usually require separate apps: XMLTV guide handling with multiple guide sources and automatic channel matching, catch-up up to 7 days, live rewind, Widevine and ClearKey DRM read from the playlist, a custom DNS setting with DoH options, recording from the guide, and a multiview mode for up to four channels with one carrying audio. The app also measures how many simultaneous streams your provider allows and warns before a stream is refused, which addresses a failure that otherwise looks like an app bug.

Installing OwnTV and adding a first source

The README does not give an adb install command or a package download URL. It points to the Telegram group at t.me/owntvplayer for the community and to extras/USER_GUIDE.md for feature documentation, and the repository carries an Android CI workflow. The release list shows tagged builds, with v5.0.0 dated 2026-09-14. Treat the Telegram group and the releases page as the places to obtain a build rather than expecting a store listing in the README.

Building from source is possible, and the README documents one trap. 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 version in gradle/libs.versions.toml, and that is what compiles the app. Keep the Compose compiler plugin on exactly that version. KSP versions independently and does not have to match it.

bash
git clone https://github.com/ahXN00/OwnTV.git
cd OwnTV
./gradlew assembleDebug

The wrapper script is gradlew on Linux and macOS, gradlew.bat on Windows. The build targets applicationId tv.own.owntv with minSdk 26, so the resulting APK installs on Android 8.0 and newer, which in practice means Android TV boxes and televisions rather than phones.

Once the app is running, the first real task is adding a source. The README states you can add Xtream, M3U or Stalker from your phone over Wi-Fi using a QR code and PIN. That avoids typing a long playlist URL with a remote. After the source syncs, the Home screen shows Continue Watching, and the Live TV, Movies, Series, Downloads and Guide sections populate from your provider. If a stream misbehaves, the app keeps an error log you can export, which is the artifact to check before assuming the source is broken.

Where OwnTV is the wrong tool

The clearest limitation is the platform. Android TV only means no phone, no tablet, and no iOS. If your household watches on a laptop or a phone, OwnTV does not apply, and the Compose for TV UI would not translate to a touch device without substantial work.

The second limitation is that OwnTV is a player. Without a provider subscription or a playlist you already have the right to use, the app has nothing to show. Anyone looking for a free source of channels will not find one here, and the README states the responsibility for sources sits with the user.

Catch-up and EPG depend on your provider. OwnTV supports catch-up up to 7 days and per-channel EPG fixes, but those features exist because provider guide data is often misaligned. The presence of a guide time offset setting and per-source guide logos is evidence that the app expects you to correct data rather than receive it clean. If you want a setup that works with no tuning, this is friction you will meet.

Finally, the project is built with the help of AI, as the README badge states. That is a statement about process, not quality, and it is worth knowing when you evaluate the codebase or file an issue. The last push to the repository was on 2026-09-17, and v5.0.0 was released on 2026-09-14, so the codebase is current as of those dates.

OwnTV compared with TiviMate

The obvious comparison is TiviMate, which is the player most Android TV IPTV users already know. The difference in approach is the playback layer. TiviMate is built around ExoPlayer and its own rendering pipeline. OwnTV ships two engines and lets you switch per channel, which is a different answer to the same problem of streams that fail on one decoder.

The second difference is source breadth. OwnTV documents Xtream, M3U and Stalker/Ministra portals in one app, including MAC-based portals. Stalker support is not universal in this category, and it is the reason some users end up running a separate app just for one provider.

The third difference is openness. OwnTV is GPLv3 with original code and a public repository, so you can read the parsing and playback logic and build it yourself. TiviMate is closed source. That matters if you want to audit how credentials are stored or how DRM keys are handled, and it matters if you want to patch behaviour rather than wait for a release.

What OwnTV does not obviously offer is the polish that comes from years of closed-source iteration. The README lists an extensive feature set, but feature lists and finished behaviour are different things. If you already have a TiviMate setup you are happy with, the case for switching rests on Stalker support, the mpv fallback, or the GPLv3 licence, not on a general claim of superiority.

Maintenance, licence and upgrade cost

OwnTV is GPLv3. If you distribute a modified build, the licence obligations attach to that distribution. Running the app on your own devices is not distribution. If you plan to ship a fork or bundle it into a product, read the LICENSE file in the repository and take your own advice on compliance; nothing here is legal advice.

Upgrade cost is low on the user side. The README lists in-app updates, and releases are tagged, with v5.0.0 on 2026-09-14 following v4.2.4 on 2026-08-27 and v4.2.3 on 2026-08-26. Backup and Restore writes a single .own file, optionally encrypted, locally or over Wi-Fi, and a new box can copy everything from an existing OwnTV device over your own Wi-Fi during first setup. That makes replacing hardware cheap. It also means a restore path exists if an upgrade goes wrong, though the README does not document rollback to a previous app version.

For contributors, the build is the maintenance cost. The Kotlin version in gradle/libs.versions.toml must match the Compose compiler plugin, KSP versions separately, and the toolchain is AGP 9.4.0 with Gradle 9.7.1. Translation runs through Weblate, and the README lists 26 interface languages. The last push to the repository was on 2026-09-17.

Editorial conclusion

OwnTV suits people with an Android TV box, an existing Xtream, M3U or Stalker subscription, and a preference for D-pad navigation over a phone-style interface. It is the wrong tool for phones and tablets, for anyone who wants bundled channels, and for viewers who expect catch-up and EPG to work without adjusting time offsets or per-channel guide fixes. Before installing, check that your box runs Android 8.0 or newer, that your provider permits the number of simultaneous streams you plan to watch, and that the GPLv3 terms fit how you intend to use the app.

Frequently asked questions

Is OwnTV free?

The app is open source under GPLv3 and the README describes it as a player only. It ships no channels, playlists, subscriptions or streams, so any content you watch comes from a source you add and pay for separately.

What is OwnTV?

OwnTV is a native Android TV IPTV player built with Kotlin and Jetpack Compose for TV. It runs libmpv and ExoPlayer as playback engines and accepts Xtream, M3U and Stalker/Ministra sources.

How does OwnTV compare with TiviMate?

OwnTV is GPLv3 with a public repository and supports Xtream, M3U and Stalker/Ministra portals, while TiviMate is closed source. OwnTV also ships two playback engines with automatic fallback and a per-channel override rather than relying on ExoPlayer alone.

Official sources

  1. ahXN00/OwnTV on GitHub
  2. License: GPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ahxn00-owntv.svg)](https://hysenlabs.com/projects/ahxn00-owntv)