An M3U playlist is a plain text file listing channel names and the web address of each stream. Xtream Codes is a login — a server address, a username and a password — that lets the app build that same list for itself, and fetch films, series and the programme guide as well.
They are two ways of handing over the same subscription. If your app offers both, choose Xtream Codes. Here is what each one is, so that the next time an app asks you for one and not the other, you know why.
What is actually inside an M3U file
Open one in a text editor and it looks like this, repeated a few thousand times:
#EXTM3U
#EXTINF:-1 tvg-id="BBCOne.uk" tvg-logo="http://.../bbc1.png" group-title="UK | ENTERTAINMENT",BBC One HD
http://your-server-address:8080/USERNAME/PASSWORD/12345.tsThree things are happening:
- `tvg-id` is how a channel is matched to the programme guide. If this is missing or wrong, that channel shows an empty guide while its neighbours are fine — and that is a data problem at the provider, not something you can fix in the app.
- `group-title` is the folder the channel appears in. It is why your list is organised by country.
- The line underneath is the actual stream. Note that it contains your username and your password in plain text.
That last point is worth stopping on. An M3U link is a password written into a web address. Anyone you send it to can watch on your line — and when your account then reports "maximum connections reached" during the football, that is why. Do not paste it into a forum, a Facebook group or a WhatsApp group asking for help. Send the channel name and the error message instead.
Most providers do not send you a file. They send a link that generates the file fresh each time, so that new channels appear without you doing anything:
http://your-server-address:8080/get.php?username=USERNAME&password=PASSWORD&type=m3u_plus&output=ts- `m3u_plus` is the modern form, carrying logos and groups. Plain
m3ugives you names and nothing else. - `output=ts` requests a continuous stream.
output=hls(sometimesm3u8) requests a chunked one.
Which output to ask for: `ts` is the safer default on televisions and set-top boxes; hls behaves better on iPhones and iPads and copes slightly better with an unstable connection. If a channel refuses to play on one, it is worth trying the other before concluding anything is broken.
What Xtream Codes is
Xtream Codes was the name of a panel used to run IPTV servers. The company behind it shut down in 2019, but its API — the way apps talk to the server — became the de-facto standard, and virtually every panel since implements it. That is why apps still say "Xtream Codes API" today: it describes an interface, not a company you are buying from.
Practically, it means the app asks for three boxes instead of one link:
- Server URL —
http://your-server-address:8080, and nothing after the port - Username
- Password
The app then queries the server itself and gets back proper categories: Live TV, Movies and Series, each browsable, with descriptions, posters and episode lists.
This is the practical difference. An M3U playlist is one flat list — films and series appear as thousands of extra "channels" mixed in with the live ones. With Xtream, the app knows what is a film and what is a series, so you get a Netflix-style browse instead of scrolling past 4,000 films to reach Sky Sports. You also get a resume position on films, and a series that knows it has seasons.
So which should you use?
Use Xtream Codes when the app offers it. IPTV Smarters, TiviMate, OTT Navigator, Smart IPTV and most Android players all do.
Use the M3U link when the app only accepts a URL. This is the case for nearly all the Samsung and LG store players — IBO Player, Set IPTV, Net IPTV and the rest of that family are built around a playlist link that you register on the app maker's website. See our Samsung and LG setup guide for how that works in practice, and the activations page if your app is asking to be unlocked before it will play anything.
Use the M3U link in VLC to test. More on that below — it is the most useful diagnostic tool you have.
You do not choose one *instead* of the other, and you are not paying twice. It is one account, expressed two ways: the same username and password appear in both.
The programme guide
The guide is a third thing again, delivered as an XMLTV file:
http://your-server-address:8080/xmltv.php?username=USERNAME&password=PASSWORDWith Xtream Codes the app usually finds this by itself. With an M3U setup you often have to paste it into a separate EPG URL field.
Two things go wrong with guides, and neither is a broken subscription:
- Everything is shifted by a fixed number of hours. That is a time zone setting in the app. Set your own zone and refresh the EPG.
- Some channels have a guide and others are blank. That is
tvg-idnot matching between the playlist and the XMLTV file. Only your provider can fix it — tell them the channel name.
An EPG file for a large list can be tens of megabytes. On a weak device it takes a minute to load, and refreshing it every hour on a Fire Stick Lite is a good way to make the whole interface feel broken. Once a day is plenty.
Test it in VLC in sixty seconds
This is the fastest way to find out whether a problem is your subscription or your television.
- Install VLC on a laptop.
- Media → Open Network Stream.
- Paste your M3U link and press Play.
The channel list appears in VLC's playlist window and you can play any of them. If it works in VLC, your subscription, your credentials and your internet connection are all fine, and the problem is the app or the device. That single test saves an enormous amount of arguing, and it is the first thing worth doing before contacting anybody's support — including ours.
When the link stops working overnight
A playlist that worked yesterday and returns nothing today, on every device at once, usually means one of three things — and none of them is your television:
- The subscription expired. Check the date before anything else. It is the answer more often than it is dignified to admit.
- The server address changed. Providers move servers, and some publish several addresses that point at the same account. When that happens, only the
your-server-address:8080part of your link changes; your username and password stay the same. Swap it in and everything works again. - Your internet provider started blocking it. The fingerprint is specific: nothing loads at all, instantly, on every channel, while the same link works perfectly on mobile data. That is not buffering and none of the buffering fixes apply to it.
The last one is the reason to test on your phone with Wi-Fi turned off before you conclude that a subscription is dead. Two minutes, and it separates "their server" from "my line" cleanly.
What these are not
- Not a channel package. The playlist is a menu; the subscription behind it is what serves the food. An M3U link with an expired account behind it opens on an empty or error-filled list.
- Not editable in any useful way. You can open the file and delete channels you never watch, but the next refresh from the server replaces it. Use the app's favourites instead.
- Not per-device. Your line has a connection limit — usually one or two streams at once. The same M3U link opened on three devices does not give you three subscriptions, it gives you "maximum connections reached" on the third.
If you have a subscription with us and just want the details typed into the right boxes for your particular device, the help centre has a guide per device with your own server address, username and password already filled into every step. If you do not have one yet, a free 24-hour trial gives you a real set of credentials to try all of this with.