AICKO IPTV: the free app for your IPTV playlists Download

Published on · by the AICKO IPTV team · 7 min read

EPG: a guide that travels separately

The EPG (Electronic Program Guide) is the schedule showing what is on now and next on each channel. On digital terrestrial TV, this information is carried in the signal itself, within tables standardized by the DVB standard. On the Internet it is different: a channel's video and its guide generally arrive by two separate paths.

EPG and XMLTV: where the program guide comes from

On one side, the player receives the video stream from an M3U playlist or an Xtream Codes connection. On the other, it downloads a guide file, almost always in XMLTV format, describing several days of programs for dozens or hundreds of channels. The player's job is then to match each channel in the playlist to its schedule in the file.

This separation explains most problems: a channel can work perfectly while having an empty guide, because the video and the guide do not depend on each other.

The structure of an XMLTV file

XMLTV is an open format, born in the early 2000s in the free software community, based on the XML language. A file contains a root element <tv>, then two types of blocks: channels and programs.

<?xml version="1.0" encoding="UTF-8"?>
<tv generator-info-name="example">
  <channel id="example1.com">
    <display-name>Example 1</display-name>
    <icon src="https://img.example.com/ex1.png"/>
  </channel>
  <programme start="20260928204500 +0200" stop="20260928223000 +0200" channel="example1.com">
    <title lang="en">Evening documentary</title>
    <desc lang="en">A journey into the heart of the volcanoes of Auvergne.</desc>
    <category lang="en">Documentary</category>
  </programme>
</tv>

The channel element

Each <channel> carries an id attribute, the channel's unique identifier in this file. It is often formed like a domain name (example1.com), but that is only a convention: any string is valid. It also contains one or more display names (<display-name>) and sometimes a logo (<icon>).

The programme element

Each <programme> describes a show: start time (start), end time (stop), the channel concerned (channel, which repeats the id of a <channel> element), title, and optionally summary, category, episode, year, poster or age rating. Programs are independent of one another, which lets a file cover anything from a few hours to several weeks.

Matching playlist and guide: tvg-id

The link between your playlist's channel and its schedule relies on the tvg-id attribute of the #EXTINF line. The rule is simple: the playlist's tvg-id must be identical, character for character, to the id of the <channel> in the XMLTV file.

#EXTINF:-1 tvg-id="example1.com" group-title="General",Example 1 HD
https://tv.example.com/live/ex1.m3u8

If the playlist says tvg-id="Example1.com" and the guide says id="example1.com", matching fails in many players, because the comparison is case-sensitive. When there is no tvg-id, some players try to match by name (tvg-name or the displayed name) against the guide's <display-name>; this is less reliable, because "Example 1 HD" and "Example 1" are not identical.

With an Xtream Codes connection, matching is in principle automatic: for each channel the server supplies an epg_channel_id field that plays the role of the tvg-id, and an XMLTV guide consistent with those identifiers. How this API works is detailed in our article on Xtream Codes connections, and playlist syntax in the M3U format line by line.

Times, time zones and offsets

XMLTV times are written as YYYYMMDDhhmmss followed by an offset from universal time (UTC). So 20260928204500 +0200 means 28 September 2026 at 8:45 pm, in a time zone two hours ahead of UTC, which is 6:45 pm UTC.

In mainland France, legal time is UTC+1 in winter (+0100) and UTC+2 in summer (+0200). The switch to summer time happens on the last Sunday of March, the return to winter time on the last Sunday of October. A correct guide for a French channel must therefore change its offset on those dates, or express everything in UTC with +0000. Other countries use other offsets and change dates.

The player then converts these times to your device's time zone. Hence three possible sources of shift:

SymptomLikely causeRemedy
The whole guide is off by exactly one hourThe file gives a fixed offset that ignores the clock change, or +0000 although the times are localGuide offset setting in the player, or the tvg-shift attribute
Shift of several hoursDevice time zone set wrongly, or guide intended for another countryCheck date, time and time zone in the system settings
Only one channel shiftedChannel broadcast from another time zone or deliberately delayed ("+1" version)tvg-shift on that channel only
Shift of a few minutesThe channel does not keep to its announced timesNone: the guide reflects the planned schedule

The tvg-shift attribute goes on an #EXTINF line and is expressed in hours, possibly negative or decimal: tvg-shift="-1" moves the guide back one hour for that channel. It is a patch: if the shift appears or disappears at the clock change, the real defect is in the source file.

One last trap, common on TV sticks and boxes: a wrong system date. If the device has not synchronized its clock (no network at startup, no backup battery), the player looks for programs of another day and shows nothing. Turn on automatic date and time in the settings.

Empty guide: the causes, in order

When the guide stays stubbornly empty, work methodically, from the simplest to the most technical.

  1. The guide is not loaded yet. A large file can take from a few seconds to several minutes on the first download, especially on a modest device. Let the player finish, then reopen the channel list.
  2. No guide address is entered. With an M3U playlist, you need either a url-tvg attribute in the header, or an address entered in the player's settings.
  3. The address does not respond. Open it in a browser: you should get a download or XML, not an error page.
  4. The identifiers do not match. Look for a channel's tvg-id in the XMLTV file (after decompression). If it is not there exactly, the link is broken.
  5. The guide is out of date. Look at the dates of the last <programme> entries: a file that stops yesterday cannot show anything today.
  6. The device date is wrong. See the previous section.

If only a few channels have no guide, it is almost always step 4: these channels do not exist in the file, or under another identifier. No player setting can invent a schedule that is absent from the source.

Size, compression and update frequency

An XMLTV file is verbose: each program repeats its tags, its attributes and sometimes long summaries. For a few hundred channels over a week, the file can weigh several tens of megabytes. That is why it is very often distributed compressed in gzip format, with the extension .xml.gz. XML text, very repetitive, compresses well: a size reduced five to ten times is commonly seen.

ElementEffect on sizeAdvice
Number of days coveredProportionalTwo to three days are enough for live TV
Number of channelsProportionalA guide limited to your channels is faster
Summaries and imagesSignificantUseful, but they make loading heavier
.gz compressionGreatly reduces the downloadPrefer it when the source offers it

On a TV stick with little memory, it is less the download than the parsing of the file that costs: tens of thousands of programs have to be read and indexed. A targeted guide loads much faster than a "worldwide" guide of which you use only a fraction.

As for frequency, players re-download the guide at regular intervals (often once a day) or on demand. If your schedule seems frozen, force a refresh from the settings. In AICKO IPTV, this operation and adding a guide source are described on the TV guide (EPG) page.

Summary

  • The program guide is an XMLTV file separate from the video.
  • It contains <channel> and <programme> elements linked by an identifier.
  • The playlist's tvg-id must be strictly identical to the guide's id.
  • Times carry a UTC offset (+0100 or +0200 in France); tvg-shift corrects a shifted channel.
  • A guide compressed as .xml.gz and limited to your channels loads faster.

Frequently asked questions

Why has my guide been an hour off since the clock change?

The source file uses a fixed offset that does not follow the switch to summer or winter time. The lasting remedy is a corrected source; meanwhile, a one-hour offset in the guide settings or a tvg-shift compensates for the defect.

Can I use a different guide from the one from my service?

Yes, if your player lets you enter an XMLTV address. The guide will only work if its channel identifiers match the tvg-id values of your playlist; otherwise you have to adapt those identifiers in the playlist.

Does the player have to decompress the .gz file itself?

Yes, most TV players accept .xml.gz files directly. You only need to decompress it yourself to inspect it, for example with 7-Zip on Windows.

Why do some channels have a guide and others not?

Channels without a guide are absent from the XMLTV file or appear in it under an identifier different from their tvg-id. The player can only display what the source describes.

Go further

Read next

🧩

Formats and technology

The M3U / M3U8 Format Explained Line by Line

#EXTM3U, #EXTINF, tvg-id, tvg-logo, group-title: understand every line of an M3U playlist, avoid encoding errors and build your own M3U file the right way.

Read the article
🧩

Formats and technology

How an Xtream Codes Connection Works

Xtream Codes API explained: server, port, username, player_api.php, categories, movies, series, expiry and simultaneous connections in an Xtream Codes login.

Read the article
🧩

Formats and technology

HLS, MPEG-TS and DASH: Video Streaming Protocols Explained

HLS streaming explained: segments, manifests, adaptive bitrate, latency and device compatibility for HLS, MPEG-TS and MPEG-DASH, the main streaming formats.

Read the article

Download AICKO IPTV

The app is free and works with your own IPTV subscription. Pick your device: the mobile link sends you straight to the right store.

Android and iOS Mobile version Windows 10 and 11 PC version Samsung, Android TV, Fire TV TV version
Download on the App Store Get it on Google Play Available onMicrosoft Store Available onAmazon Appstore