Setting Up a Public M3U8 Playlist for Android TV Sideloading

Updated 2026-10-28

How to set up a public M3U8 playlist for Android TV sideloading via DNS resolution

Why the playlist fails: DNS, timezone, and cache quirks

Android TV devices built on AOSP-derived firmware do not run an explicit “sideload” installer. Instead, developers point users to M3U8 playlists hosted on external servers—often delivered via a DNS entry that points to a domain with a CNAME pointing at a CDN or media server. If the device cannot resolve the hostname before the first play attempt, the player shows a blank screen and never retries. This behavior is common on early Android TV builds that cached a stale playlist URL and refused to refresh it because the network layer had not yet completed its initial DNS lookup. Confirming the correct DNS record and disabling any stale app cache are the two quickest fixes.

Preparing the host: pick a reliable M3U8 source

The first step is choosing a stream URL that publishes an M3U8 playlist over HTTPS. Popular choices include Nginx-based RSS-to-HLS bridges, YouTube playlists linked to HLS via “yewtu.”info,” or dedicated hls.m3u8 mirror services for open-access video. A public domain with a valid TLS certificate is essential; many home routers block non-HTTPS streams, and some corporate networks intercept TLS. Before you begin, note the full URL of the M3U8 file and make sure it resolves from a phone on the same Wi‑Fi network. A mismatched country code in the URL often results in geo-blocked content, so verify the source domain and region ahead of time.

Test the direct link on a mobile browser. If the browser plays the live stream without issue, the M3U8 content itself is sound. Then move to the next phase.

Step-by-step sideloading onto Android TV

Open Settings > Apps > Installer & Updates and enable “Unknown sources.” Then select “Install from unknown sources” in the app drawer. From the app drawer, choose Settings > System > Reset > Advanced reset, and restart the set‑top box once the reboot completes. This clears the cached service manager entries that sometimes hold onto a dead playlist URL.

On the home screen, press the Home button twice to summon the overlay, then select Settings > Developer options (if it is not visible, press Home + Options). Enable “Network debug” and “Show advanced user interface.” This unlocks the ability to view and modify the m3u8 configuration file path.

Create a short file named playlist.m3u8 on the local storage root (usually accessible via a file manager app that supports a file picker). Paste the full, absolute, HTTPS URL of the target playlist into that file. Ensure the trailing newline is preserved. Next, use the TV’s cast-integration or a small helper app to pass the file path to the built-in media player. On many Android TV builds, typing the path into the search bar of the natively installed Player app works: for example, “open the URL” followed by the path. After the file loads, the player should request the M3U8 manifest and begin fetching segments.

Verifying DNS resolution and segment playback

Once the playlist is loaded, confirm that the TV has resolved the hostname for each #EXT-X-STREAM-INF segment URL inside the M3U8. Android TV will log a warning like “Failed to resolve host” if the DNS lookup timed out. In the Network panel, tap Show Log, and look for getaddrinfo errors tied to your M3U8 host. If the device supports it, enable DNS prefetch in the Play Experience settings so future streams resolve faster. Check the clock timezone in Settings > System > Date & Time. An incorrect timezone can cause the player to interpret playlist expiration times incorrectly, so sync it to automatic timezone.

Common pitfalls and when to abandon the manual route

Segments that fail to load usually fall into three buckets: expired tokens embedded in the M3U8 file, geo-restricted content that requires a VPN profile on the TV, or expired SSL certificates on the remote host. If the token is embedded and unexpired, the device will simply retry the segment every few seconds until playback succeeds. If playback never recovers after three attempts, the playlist may be too large for the TV’s buffering model, and you should switch to a lower bitrate version of the same stream. Some streaming services also enforce per-device stream counts, so keep a second device ready as a backup.

If the local device refuses to resolve the hostname at all, try a different M3U8 URL on the same network. If no source works, the device’s DNS resolver may be caching old records; a factory reset restores the device’s original resolver state, but you will lose custom settings and installed apps. For permanent workarounds, consider a small Linux box or a Raspberry Pi running a lightweight HTTP proxy that performs DNS overrides before the TV queries the internet. That approach goes beyond simple sideloading but remains the most reliable method for public broadcast scenarios.

Related reading: more Android TV notes

Read next