# vesaaa/vstv: a sub 5MB Android live TV client for Chinese set top boxes, published without its source

> VsTV is an MIT licensed Android application for watching live television channels on smart TVs, boxes, tablets and phones, with native UDP and RTP multicast, a web configuration page on port 1616, and a curated channel mode for older viewers. The repository contains only a README and a licence, so the code is not published even though the licence is permissive, and the project publishes three different APKs per release with different package names.

**vesaaa/vstv** — VsTV 让你在 智能电视、电视盒子、平板或手机 上收看直播频道，支持国产及常见品牌电视 / 盒子（如 TCL、海信、酷开、华为智慧屏、荣耀、小米电视等）

- Repository: https://github.com/vesaaa/vstv
- Stars: 1,352 · Forks: 120
- Language: Unknown
- License: MIT
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/vesaaa-vstv

## A README and a licence, and no source

The first thing to know about this repository is what it contains, and the answer is unusual. The top level of the tree is a `LICENSE` file and a `README.md`.

That is the whole repository. There is no application source, no build system and no history of the code, in a project whose licence is MIT and whose releases are published as downloadable APKs.

So the value of the repository is documentation, and it is unusually good documentation. The README explains the design decisions, the supported source formats, the exact install path for each device class, the limitations of each feature and, in the AI subtitle section, the pricing implication of the feature you turn on. That is more than most projects publish about their closed source, and it is the kind of detail you would normally look for in the code.

The consequence for an adopter is straightforward. You can install and use the application, and you can read exactly what it does and does not do, but you cannot build it, patch it or audit the implementation. If that matters for your use, this is where the decision is made.

## The application ships with no content, on purpose

The most important sentence in the README for a new user is the one about what is not included.

The first installation does not write a default live source. You configure the subscription address and the programme guide yourself, either in Settings or through the browser at `http://<device IP>:1616`, and the application does not provide any live source or programme content, with the instruction to use only addresses you have been legally authorised to use.

That is a deliberate design choice, and it is the reason the project is defensible to publish at all: the content is the operator's, the app is the player. It also means the out of the box experience is empty, and the first run ends with a blank channel list until you have a subscription.

The web configuration page on port 1616 is worth understanding as a design decision rather than a convenience. It writes the same configuration as the settings screen on the television, which means you can paste a long subscription URL on a laptop with a keyboard instead of typing it with a remote control. The page depends on a public CDN, jsDelivr by name, so it needs network access, and the README flags that as a requirement rather than a detail.

## Multicast is the technical centre of the project

The feature that distinguishes VsTV from a generic M3U player is native multicast support, aimed at Chinese IPTV networks.

The README describes a built-in native multicast protocol stack supporting `udp://` and `rtp://` direct streams, and the point is that no forwarding is needed. You no longer require an `udpproxy` or a multicast server in between; you plug in the network cable or join the Wi-Fi and it plays. The mechanism is a `MulticastLock`, described as preventing the Android system from silently dropping multicast packets, with a claimed improvement of more than 50% in channel switch response.

The setup instructions make the hardware requirement clear. You fill in an address of the form `udp://@239.x.x.x:xxxx` or `rtp://239.x.x.x:xxxx`, you make sure the television or box is connected to the IPTV private network, which usually means the iTV port on the optical modem or a configured VLAN, and VsTV acquires the multicast lock and enables a 2MB receive buffer on its own with no extra configuration.

So the app is not merely a playlist player, it is a client that can join a multicast group directly, and the 2MB buffer and the lock are the two things that make a 4K multicast stream watchable on a cheap box.

## Multiple sources, multiple lines, and a mode for older viewers

Two features are worth separating, because they solve different problems.

The first is multi-source merging. You configure several subscription sources in the settings, and the application aggregates them by channel name, so if two sources both carry CCTV1 the channel list shows them as lines 1, 2 and 3, and the left and right keys switch between the lines. The stated purpose is to build a channel library of your own out of what different sources offer.

The second is the curated mode for elderly and child viewers, and the interaction design here is the interesting part. You long press the OK key on a channel in the channel list to add it to the favourites, then in the settings under the favourites configuration you tick the option to show only the favourites list. After that, the up and down keys cycle only through the curated channels, and the interface hides everything else.

That solves a specific problem the README names, that finding channels is hard for older people, and the long press on the OK key is a gesture a television remote can perform without a menu.

There is also time-shift catch-up, which uses the operator's standard `catchup` template and supports up to seven days of history, with a progress bar you can drag and a one click return to live. The catch-up depends on the playlist and the source, and the feature list is honest about that.

## AI subtitles, and who pays for them

Since version 2.7.0 the application can translate foreign language programming into Chinese subtitles in real time, and the details of how that works are specified precisely.

It uses Alibaba Cloud Bailian, and you have to obtain your own API key from that service. The README is specific about the region, telling you to choose 华北2（北京） because a key from the international site does not work, and you also need the business space identifier, which looks like `ws-xxxxxxxx` and is shown on the business space page. You enter both in Settings, under AI subtitles, or you can choose to enter the key from your phone by scanning a code and pasting it in the web page.

The caveats are as detailed as the setup. The picture will lag the live stream by a few seconds, which is adjustable as a subtitle lead of 3 to 8 seconds with a default of 5, so the subtitles line up with the audio. The cost is charged by Alibaba Cloud according to the listening time, and the recommendation is to turn it off when you are not watching foreign programming. Split-screen playback, the 菁彩声 AV3A audio and DASH or RTSP live sources are not supported, and the feature only applies to the channel you are watching, switching off when you change channel.

That last combination, a third party key, per minute billing and a per channel switch, makes this a feature to think about rather than a switch to flip.

## Three APKs, and why one of them cannot be mixed

Each release usually contains three install packages, and the choice is not cosmetic.

The `vstv-<version>-arm.apk` is the default choice, with the desktop name VsTV and the package name `com.vesaa.mytv`, for most televisions, boxes and phones on ARM. The `vstv-<version>-x86_64.apk` is for x86_64 devices and uses the same conventional package name. The `vstv-<version>-HarmonyOS.apk` is for Huawei Vision screens and for cases needing a different package name, with the desktop name Z视介 and the package name `com.chinablue.tv`, and the README is emphatic that this variant's data and update channel do not interoperate with the normal package, so the upgrade packages must not be mixed.

The in-app update check matches the attachment to the installed package and the device architecture, from version 2.0.0 onwards, and the older upgrade logic into 2.0.0 is described in the changelog.

The reason for the split is the application id. On a HarmonyOS screen the app needs a different package name, and a different package name means a different install and a different data directory, which is why the channels are separate. It is the same kind of constraint that makes a fork of an app a maintenance burden, and it is why the HarmonyOS build is the one to be careful with.

## Where this is the wrong choice

The first wrong case is anybody who needs the source, because there is none. The README is good, the licences are permissive, and the behaviour is well specified, but you cannot audit, patch or rebuild this application, and a project that handles a network video stream on a device you own is exactly the kind of thing people want to read the code of.

The second is a device outside the target market. The supported environments are Chinese brand televisions and boxes, mostly vendor customised Android, with some HarmonyOS devices running through an Android compatibility layer, and the README says the app needs Android 5 or later, does not depend on Google Play or a Google account, and is typically installed from a USB drive, a remote push, the web page or a file manager. A phone or tablet is also supported, but the ergonomics are built for a television.

The third is a network that does not give you IPTV multicast. The standout feature needs the iTV port on the optical modem or a VLAN, and if your provider gives you a unicast stream instead, the native multicast advantage disappears and you are left with a fairly ordinary M3U player.

The fourth is a device with a weak decoder. The README says the actual playback effect depends on the device's decoding capability and the quality of the source, and the player is built on Media3 with an extension renderer that enables software decoding as a fallback, which helps on some hardware and cannot help on all of it.

On the state of the project, the releases are v2.6.5 on 2026-10-14, v2.6.6 on 2026-10-15 and v2.7.0 on 2026-10-15, so it is moving quickly, and the licence is MIT.

## Conclusion

Adopt VsTV if you have a Chinese market TV or set top box and a legitimate IPTV subscription and want a small, fast client that speaks multicast natively, since the under 5MB build and the 2MB receive buffer are aimed squarely at low end hardware such as the S905 boxes. Do not adopt it expecting open source you can build, because the repository holds only a README and a licence file, so you can read the design but not the code. Verify first that your device runs Android 5 or later and can be side loaded, that your network gives the box access to the IPTV multicast group, and that you read the README's instruction to use only subscription addresses you are authorised to use, since the application deliberately ships with no content at all.

## FAQ

### Does VsTV include any live TV channels or programme data?

No. The first installation does not write a default live source, and the application does not provide any live source or programme content. You supply your own authorised subscription address and programme guide in the settings or through the web configuration page at `http://<device IP>:1616`, and two EPG templates are included as optional starting points that you can replace with your own XMLTV address or disable.

### How does VsTV handle IPTV multicast?

It has a built-in native multicast protocol stack supporting `udp://` and `rtp://` direct streams, so no `udpproxy` or multicast server forwarding is needed. It acquires a multicast lock to stop Android silently dropping packets and enables a 2MB receive buffer, and the device has to be on the IPTV private network, usually the iTV port on the optical modem or a configured VLAN.

### Which subscription formats does VsTV support?

Standard M3U playlists, the TVBox style format with `分组名,#genre#` and `频道名,地址` lines including single channel multi line and resolution suffixes, plain TXT playlists of the same style, and rtp2httpd output playlists, in which relative paths are made absolute against the subscription address. The player is based on Media3 and falls back from HLS to DASH to Smooth Streaming to progressive when the server's container does not match what it infers.

### How does the AI subtitle feature work and what does it cost?

Since version 2.7.0 the app can translate foreign programming into Chinese subtitles in real time, using your own Alibaba Cloud Bailian API key and business space ID, with the region set to 华北2（北京）. The picture lags by an adjustable 3 to 8 seconds, the cost is charged by Alibaba Cloud according to listening time, and split-screen playback, AV3A audio and DASH or RTSP sources are not supported.

### Which APK should I install on my device?

The arm build is the default, with the desktop name VsTV and the package name `com.vesaa.mytv`, and the x86_64 build is for x86_64 devices with the same package name. The HarmonyOS build, with the desktop name Z视介 and the package name `com.chinablue.tv`, is for Huawei Vision screens and cases needing a different package name, and its data and update channel do not interoperate with the normal package, so the upgrade packages must not be mixed.

## Sources

- [Issues](https://github.com/vesaaa/vstv/issues)
- [License: MIT](https://github.com/vesaaa/vstv/blob/main/LICENSE)
- [README](https://github.com/vesaaa/vstv/blob/main/README.md)
- [Releases](https://github.com/vesaaa/vstv/releases)
- [vesaaa/vstv on GitHub](https://github.com/vesaaa/vstv)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/vesaaa-vstv
