Short answer: an M3U playlist is a plain text file: a list of stream addresses, each with a line of labels above it saying what the channel is called, which logo to show and which group it belongs to. It holds no video at all. The catch most people miss is that the file is only as good as the addresses inside it. When a channel stops working, the playlist format is almost never the problem. The link has changed, the account behind it has expired, or the source was never licensed to begin with.
At a glance
What an M3U file really is
| Contents | Text only: names, logos, stream URLs |
| First line |
#EXTM3U, always |
| Per channel | One #EXTINF line, then one URL |
| M3U vs M3U8 | Same format; M3U8 means UTF-8 text |
| TV guide | A separate XMLTV file, matched by ID |
Where the format came from
M3U started life in the late 1990s as the playlist format for Winamp, the desktop music player. The letters stand for "MP3 URL". A playlist was just a list of song files on your hard drive, one per line, so the player knew what to play next.
Because the format is so simple, it spread. Any line could hold a web address instead of a file path, and a web address could point to a live stream instead of a song. By the time internet television arrived, M3U was already understood by nearly every media player, which is why it became the default way to hand someone a list of channels.
That history explains its biggest weakness. M3U was never formally standardised for television. The extra labels IPTV players rely on, such as channel logos and guide IDs, are conventions that grew up informally. Most players agree on the common ones, but not on all of them.
Anatomy of a playlist, line by line
Open any M3U file in a text editor and you will see something like this:
#EXTM3U x-tvg-url="https://example.com/guide.xml" #EXTINF:-1 tvg-id="news.example" tvg-logo="https://example.com/news.png" group-title="News",Example News https://example.com/live/news/index.m3u8 #EXTINF:-1 tvg-id="kids.example" group-title="Kids",Example Kids https://example.com/live/kids/index.m3u8
Reading it top to bottom:
-
#EXTM3Uis the header. It tells the player this is an "extended" playlist with labels, not a bare list of addresses. Some headers also carry the address of a guide file. -
#EXTINF:-1starts a channel entry. The number is the duration in seconds;-1means "unknown or endless", which is what a live channel is. -
The attributes in the middle (
tvg-id,tvg-logo,group-title) are the labels. - The text after the last comma is the display name you see in the channel list.
- The next line is the stream address itself. This is the only part that actually plays anything.
Lines starting with # are instructions or comments. Every other non-blank line is treated as something to play. A single stray line break inside an #EXTINF line is enough to shift every channel below it by one, which is why hand-edited playlists sometimes show the wrong names against the wrong streams.
The attributes players read
These are the labels you will meet most often. Support varies by app, so treat the right-hand column as typical rather than guaranteed.
| Attribute | What it does | If it's missing |
|---|---|---|
tvg-id |
Links the channel to its entry in the TV guide file | No programme info, even if the guide loads |
tvg-name |
Alternative name some players use for guide matching | Player falls back to the display name |
tvg-logo |
Web address of the channel logo | Blank or generic icon |
group-title |
Puts the channel into a category or folder | Everything lands in one long list |
tvg-chno |
Sets a channel number | Channels numbered in file order |
catchup / catchup-days
|
Tells the player how to request past programmes | No rewind into earlier shows |
x-tvg-url or url-tvg (header) |
Address of the guide file | You add the guide URL by hand |
The one that matters most is tvg-id. It is the only thing tying a channel in the playlist to its schedule in the guide, and a mismatch of a single character breaks the link silently. If your guide shows "No information" on some channels but not others, this is the first thing to check.
M3U, M3U8 and HLS: three things with one name
The same extension turns up in three different jobs, which causes real confusion.
M3U is the channel list described above, originally in whatever text encoding the computer used.
M3U8 is the same format saved as UTF-8 text. The "8" is about characters, not features. It matters when channel names include accents or non-Latin scripts: an Arabic, Hindi or Portuguese channel list saved as plain M3U can display as garbled symbols.
HLS playlists also end in .m3u8, but they are a different animal. Apple's HTTP Live Streaming uses them to list short video chunks, usually a few seconds each, that make up a single stream, often in several quality levels. When you see a stream address ending in index.m3u8 inside your channel list, that is an HLS playlist nested inside an M3U playlist. Your player opens the outer list to find the channel, then the inner list to fetch the video.
You don't need to manage the inner layer. But it explains why a channel can load its name and logo instantly yet fail to play: the outer file was fine, the inner stream was not.
How the TV guide attaches
An M3U playlist has no schedule in it. The programme guide, usually called the EPG, lives in a separate XML file in a format called XMLTV. That file lists channels by ID and then lists every programme with a start time, end time and title.
The player joins the two by matching the tvg-id in your playlist to the channel ID in the guide. Three things have to line up: the guide file has to load, the IDs have to match exactly, and the time zone has to be right. When any one fails, you get empty rows or programmes shown an hour out. We cover that in detail in why the EPG guide isn't loading.
Guide files are also large. A national guide covering two weeks can run to tens of megabytes, which is why some players only refresh it once a day and why low-memory TV sticks sometimes give up on it entirely.
A file on disk vs a playlist URL
Services hand playlists over in two ways, and the difference matters more than it looks.
| Downloaded file | Playlist URL | |
|---|---|---|
| Updates | Frozen at the moment you saved it | Re-fetched by the player on a schedule |
| Channel changes | You must replace the file | Picked up automatically |
| Works offline | The list does; streams don't | Neither |
| Credentials | Often embedded in each stream address | Often embedded in the URL itself |
Many services now skip M3U altogether and give you a server address, username and password instead, using an API often called Xtream Codes. The player builds the channel list itself from that login. It's the same idea with fewer moving parts; how the Xtream login works explains the trade-offs.
One practical warning: if your playlist URL or file contains your username and password in plain text, treat it like a password. Anyone you send it to can use your account, and most services limit how many connections run at once.
What goes wrong, and where to look
Because an M3U file is so simple, the symptoms point fairly clearly at the cause.
-
Player says "invalid playlist" or shows nothing. The first line isn't
#EXTM3U, the download returned an error page instead of a playlist, or the URL has expired. Open the URL in a browser and see what actually comes back. - Names and logos load, streams don't. The list is fine; the stream addresses behind it aren't reachable. Test one address directly in VLC; using VLC to diagnose a stream walks through reading the error.
- Channel names show as odd symbols. Encoding. Re-save as UTF-8, or use the M3U8 version if one is offered.
-
Some channels have guide data, others don't. A
tvg-idmismatch on the empty ones. - Everything worked yesterday. Account expiry, a changed server address, or a playlist URL that was rotated. Check with whoever issued it before touching settings.
Where legitimate playlists come from
The format itself is neutral. It is used by broadcasters, hotels, universities, TV operators and home setups alike. Legitimate sources include:
- Your own network tuner. Devices such as an HDHomeRun turn antenna channels into a local M3U list for use in Plex, Jellyfin or a player app. Setting up an M3U source in Plex covers that route.
- Licensed operators that support third-party players and issue you a playlist or login with your subscription.
- Official public-service and free channels that publish their own stream links.
- Community-maintained lists of publicly available streams, which are only as reliable as the streams they point at, and often change.
What the format can't tell you is whether the seller had the right to distribute those channels. A playlist listing thousands of premium sports and film channels for a few dollars a month is not a clever technical shortcut; it is a sign the rights weren't paid for. Those services tend to vanish without refunds. If you're weighing up a provider, finding a licensed provider shows how to check.
Quick answers
Is an M3U file a virus risk? The file itself is text and can't run code. The risk sits with apps downloaded from unofficial sources to open it, not with the playlist.
Can I edit an M3U playlist? Yes, in any plain text editor. Keep the #EXTINF line and its address together, save as UTF-8, and keep a copy of the original.
What's the difference between M3U and M3U8? M3U8 is the same format saved in UTF-8 encoding. The extension is also used for HLS stream playlists, which list video chunks rather than channels.
Why does my playlist load but channels won't play? The list is readable but the stream addresses inside it are unreachable, expired or blocked. Test one address in VLC to see the actual error.
Does an M3U file include the TV guide? No. The guide is a separate XMLTV file, linked through the header or added in the player, and matched to channels by tvg-id.
Is using an M3U playlist legal? The format is legal and widely used. What matters is whether the channels in it are licensed for distribution to you.
M3U or Xtream login, which is better? An Xtream-style login usually gives better catch-up and film library support; an M3U URL works in more players. Many services offer both.
M3U attribute support differs between player apps and versions. Check your player's own documentation for the tags it reads. Checked September 2026.