Part of IPTV Player Guide

Technical Guide · 9 min read

EPG & XMLTV Explained: How Program Guides Work in IPTV Players

Where electronic program guide data comes from, why XMLTV is the standard format, why your guide sometimes fails to show up, and how to combine multiple EPG sources for full channel coverage.

6 min read

If you’ve ever opened an IPTV player and seen channel names but no program guide — no titles, no times, no synopses — you’ve hit an EPG problem. The Electronic Program Guide is the grid that tells you what’s on a channel right now and what’s coming up, and getting it to work reliably is the single most common configuration headache in IPTV.

This is the deep-dive on EPG. For the broader picture of how EPG fits into an IPTV player overall, see our IPTV Player Guide — this article assumes you’ve already read the basics there.

What is an EPG?

EPG stands for Electronic Program Guide. It’s the digital equivalent of a TV listings page in a newspaper — a grid showing which programs are on which channels, when they start and end, and ideally what they’re about. In a traditional cable or satellite box, the EPG is built in. In IPTV, it has to be fetched separately, and that’s where things get interesting.

Why EPG is separate from the playlist. Your M3U playlist lists channels and stream URLs. EPG is a completely different file — typically much larger — listing programs and times. The player downloads both and matches them via the tvg-id attribute (see below).

The XMLTV format

Almost every IPTV EPG uses the XMLTV format — an open XML standard with two types of elements: <channel> declarations and <programme> entries.

example.xmltv
XMLTV FORMAT
<tv>
  <channel id="news.uk">
    <display-name>News UK</display-name>
    <icon src="https://example.com/news.png" />
  </channel>

  <programme start="20260526200000 +0000"
             stop="20260526210000 +0000"
             channel="news.uk">
    <title>Evening News</title>
    <desc>Daily news roundup with regional coverage.</desc>
    <category>News</category>
  </programme>
</tv>

The channel id in the XMLTV file must match the tvg-id in your M3U playlist. If they don’t match, the player has no way to connect “News UK in your playlist” with “News UK programming data in the XMLTV”. This is the #1 cause of empty EPGs.

How tvg-id matching works

Every channel in your M3U should have a tvg-id attribute that maps to a channel ID in the XMLTV file:

Matching example
M3U + XMLTV
In your M3U:
#EXTINF:-1 tvg-id="news.uk" tvg-logo="...",News UK
https://stream.example.com/news/

In your XMLTV:
<channel id="news.uk">
  <display-name>News UK</display-name>
</channel>

→ The player matches "news.uk" on both sides and displays the EPG.

If the IDs don’t match exactly — case-sensitive, no extra spaces — no EPG. The most common mistakes:

  • Playlist uses tvg-id="NewsUK" but XMLTV uses id="news.uk"
  • Playlist has no tvg-id attribute at all
  • Different XMLTV sources use different ID conventions (BBC1.uk vs bbc.one.uk)
  • The XMLTV file is in a different timezone and times look wrong
Diagram · Required

tvg-id matching visualization

Vector diagram showing two boxes side by side: M3U playlist (with tvg-id=”news.uk”) and XMLTV file (with channel id=”news.uk”), connected by a green arrow labeled “MATCH”.

Format: SVG
Size: 900×400
Alt: “Diagram showing tvg-id matching between M3U playlist and XMLTV file”

The tvg-id attribute must match exactly between your M3U and XMLTV files. Case matters.

Where to find EPG sources

Some IPTV providers ship their EPG URL with your subscription — check the welcome email or dashboard. For free public channels, a few well-known sources cover most needs:

Source Coverage Reliability
iptv-org/epg Worldwide public broadcasts High · open-source
epg.pw 200+ countries, language-organized High · community-maintained
Provider-shipped Channels of your subscription Variable
schedulesdirect.org North America premium guide High · paid service

Combining multiple EPG sources

Single-EPG players force you to choose: a French EPG with great French coverage but no UK, or a global EPG with decent coverage everywhere but missing your favorite local channel. Undaplayer solves this with multi-EPG: combine up to five sources and decide which one wins per channel.

How priority works. When two EPG sources both have data for the same channel, Undaplayer uses the higher-priority source. You can reorder sources in Settings → EPG → Sources by drag-and-drop.

Why your EPG isn’t showing

In order of frequency, here’s why EPG fails to display:

  1. tvg-id mismatch. The most common. Check that your M3U tvg-id values exactly match the XMLTV channel id values.
  2. EPG source unreachable. The XMLTV URL is dead or temporarily down. Try opening the URL in a browser — if it doesn’t return XML, the source is broken.
  3. Wrong timezone. XMLTV times include a timezone offset like +0000. If your player doesn’t apply the offset, programs show at wrong times.
  4. Stale cache. The player still has yesterday’s EPG. Force-refresh in settings, or wait for the next scheduled fetch (typically every 12-24 hours).
  5. XMLTV size limit. Some players cap parsing at ~50 MB. Huge XMLTV files (200+ MB) get truncated or rejected.

How to add an EPG source in Undaplayer

Here’s the exact 4-step process. The same logic applies to most Android IPTV players, with slightly different menu locations.

Screenshot · Required

Settings → EPG Sources screen

Annotated screenshot of the “Add new EPG source” dialog in Undaplayer. Highlight the URL input field, the name field, and the Save button.

Format: WebP
Size: 1200×800
Alt: “Undaplayer Add EPG Source dialog with URL and name fields”

The Add EPG Source dialog in Undaplayer — accessible from Settings → EPG Sources.
  1. Find an EPG URL matching your playlist

    Identify an XMLTV source that covers the channels in your playlist. Common sources: iptv-org/epg, epg.pw, or provider-shipped feeds. Copy the direct URL (it should end in .xml, .xml.gz, or no extension).

  2. Add the EPG URL in the player settings

    In Undaplayer, go to Settings → EPG Sources → Add new source. Paste the XMLTV URL, give it a name (e.g. “iptv-org global”), and save. The player will start downloading immediately.

  3. Verify tvg-id matching

    Ensure each channel in your M3U has a tvg-id attribute matching a channel id in the XMLTV file. If they don’t match, the EPG won’t display. Undaplayer shows a green dot next to channels with matched EPG data.

  4. Refresh and verify

    Force-refresh the EPG (long-press the EPG menu) and check that programs are displayed correctly. Allow up to 24h for full guide coverage to load — XMLTV files can be hundreds of megabytes uncompressed.

If your EPG still doesn’t show after 24h, check the EPG diagnostic in Undaplayer (Settings → EPG → Diagnostics). It lists exactly which channels matched and which didn’t, with the unmatched tvg-id values displayed so you can fix them.

For the M3U side of the equation — how playlists define channels, attributes, and group categories — see our companion deep-dive M3U & Xtream Codes Reference. For the full installation flow on any device, head to the Setup Guide.

Ready to get started?

Unda Player is free, ad-free, and account-free. Get it on Google Play.

Download Free

← Back to the full guide

IPTV Player Guide

What is an IPTV player, how M3U and Xtream Codes work, and how to choose one in 2026. A clear,…