anITer/utv

Media & Design

An Android TV IPTV player tuned for Beijing Unicom multicast streams, handling udpxy fallback, MP2 and Dolby audio, and channel scanning.

79
22
Java
MIT
6 days old

If you have a Beijing Unicom IPTV subscription and want to watch it on an Android TV box or phone without the carrier's set-top box, this player is aimed squarely at that setup. It is narrow by design: the built-in channel list is Beijing Unicom's multicast service, not a general-purpose IPTV client.

The problem

A subscriber wants the carrier's live channels, including 4K CCTV and Beijing feeds, playing on a device they already own. The usual path starts with a router-side udpxy that converts multicast RTP into HTTP, then a player that can open the resulting stream. When udpxy is missing or the IPTV port is wired directly to a box, playback simply stops, and changing channels often shows a slow, broken start because the player joins mid-GOP. uTV changes that by shipping a local multicast-to-HTTP proxy and a custom stream pipeline, so the same app can play through the router, through its own local gateway, or by joining multicast directly. The result is live playback plus a scan screen that records which channels actually respond.

What's different

The core mechanism is a pooled downloader and decoder architecture built on ijkplayer. Instead of tearing down and rebuilding a player for every channel change, the app recycles decoder instances and aligns the stream at PAT, PMT, the first video IDR frame and a matching-PTS audio frame. That targeting is the interesting part: the README attributes the familiar few seconds of half-speed playback at channel start to joining between keyframes, and claims this alignment fixes it. A local proxy with automatic fallback from external udpxy is also unusual for a player app, since it moves a normally router-side job into the Android device.

Audio support is the other differentiator. The bundled ijkplayer libraries enable MP2 decoding across four ABIs, and a separate path hands AC-3/E-AC-3 tracks to Android's hardware MediaCodec and AudioTrack with an HDMI passthrough fallback. The trade-off is complexity: three transport modes, two player kernels, hardware and software decoding, and multiple render views mean more settings to get right. The README also depends on shell tooling for the native inspection mode, and the built-in channel data comes from another project's list, so freshness of that data is not this app's job.

Who should try it

A good fit is a Beijing Unicom IPTV subscriber with an Android TV box, a router they can configure or bypass, and a willingness to adjust udpxy or proxy settings until a stream plays. The built-in scan screen is especially useful for someone who wants to check whether channels are reachable and what codec and resolution they actually carry. A poor fit is anyone outside that ISP footprint, since the channel lists and multicast addresses are specific to Beijing Unicom. It is also a poor fit for users who want a plug-and-play generic player: the README's setup assumes familiarity with udpxy addresses, multicast ranges and APK sideloading. If a router-side udpxy is already running, that documented path avoids the local proxy entirely.

Requirements and limitations

You need Android 5.0 or newer (minSdk 21, compileSdk 34) and a build toolchain of JDK 8+ with Android SDK; the README gives Gradle commands and expects adb install for deployment. The practical requirement is network topology: external udpxy at a reachable address, or an IPTV-facing network interface the app can bind to for its local proxy, or direct multicast with IGMP on the device's network. Without one of these, the app has nothing to play. The APK bundles native ijkplayer/FFmpeg libraries for arm64-v8a, armeabi-v7a, x86 and x86_64, so size and ABI coverage matter on older boxes.

Ongoing upkeep is mostly about channel lists and proxy addresses. The built-in M3U files are snapshots from the upstream bj-unicom-iptv project, and channels move; the scan-and-export workflow exists precisely because availability drifts. There is no separate content service or subscription management here, and the README does not describe a hosted channel feed, so expect to re-scan and re-export when channels go dark. Build and installation instructions are in the project README.

HotRepo's take

The repository was six days old at the 2026-10-25 snapshot, with 79 total stars and #20 on the NEW-REPOSITORY board for Java, not the overall Trending board. That is a single dated observation from a two-day sample, so momentum cannot be judged. The decision point is whether your network path (udpxy, local proxy interface, or direct multicast) matches one of the documented modes before you build; verify that against the README's setup notes rather than assuming the default udpxy address works on your router.

Written by AI from the project's README, updated October 25, 2026. The project's own docs are the source of truth.