DECODR.TV

M3U · M3U8 · HLS player

Formats

What is an M3U playlist? The format explained line by line

By Decodr Editorial 9 min read
Abstract illustration of a text playlist turning into a grid of channel tiles

An M3U playlist file is a plain text index of media locations. It stores no audio or video — just a list of URLs or file paths, optionally annotated with titles, logos and groups. IPTV players and media apps read that M3U playlist and turn it into a browsable set of channels and items.

Open an M3U file in a text editor and the mystery evaporates. There are no headers to decode, no binary structures, no container format — just lines. Some start with a # and describe the item that follows; the rest are locations. That is the entire format, and it is why a file listing thousands of television channels can be smaller than a single photograph.

This guide reads the format line by line, explains the IPTV attributes that were bolted on later, clarifies the M3U / M3U8 / HLS confusion, and shows how to write or repair a playlist yourself.

A minimal M3U playlist example

#EXTM3U
#EXTINF:-1 tvg-id="example.1" tvg-logo="https://example.com/logo.png" group-title="Demo",Example Channel
https://example.com/stream/index.m3u8

Three lines: a header declaring the extended format, a metadata line, and the media URL it describes. Add another #EXTINF and URL pair for each additional channel. Players read the file top to bottom and preserve that order.

The tags that matter

Common M3U playlist tags and what they do
TagWhat it does
#EXTM3UThe header on line one. Its presence marks an extended playlist.
#EXTINFDuration (-1 for live), attributes, then the display name after the comma.
tvg-idIdentifier used to match electronic programme guide (EPG) data.
tvg-logoURL of the channel artwork shown next to the entry.
group-titleCategory used to build filters and sections in the player.

Reading an #EXTINF line

The line is deceptively dense. After #EXTINF: comes the duration in seconds, with -1 meaning “unknown or live”. Then come optional space-separated attributes in key="value" form. Finally, after a comma, the human-readable title. Everything before the comma is machine-facing; everything after it is what you see in the channel list.

A frequent cause of a mangled playlist is a comma inside a channel name. Parsers split on the first comma, so News, Live becomes the title News, Live only if the attributes before it are well formed — otherwise the entry can lose its metadata entirely.

M3U vs M3U8 vs HLS

Differences between M3U, M3U8 and HLS
TermWhat it isTypical use
M3UPlain text playlist, historically Latin-1Local media playlists, channel lists
M3U8The same format encoded as UTF-8Stream manifests and international channel names
HLSA streaming protocol that uses .m3u8 manifestsAdaptive live and on-demand video delivery

In short: M3U and M3U8 are file formats, HLS is the protocol built on top of them. See the M3U8 file guide or the HLS streaming guide for each side.

Where the M3U format is used

M3U predates streaming: it started as a local playlist format for media players — the history of the M3U format goes back to Winamp in the late 1990s, where it simply pointed at MP3 files on a hard drive. Today the same syntax underpins HLS manifests as standardised in RFC 8216, podcast and radio station lists, self-hosted media servers such as Jellyfin and Plex, and the channel lists broadcasters and IPTV providers supply to their own subscribers.

Writing or repairing a playlist yourself

  1. Open a text editor and put #EXTM3U on the first line, with nothing before it — not even a blank line or a byte-order mark.
  2. For each entry, add an #EXTINF:-1 group-title="News",Channel Name line followed by the stream URL on the next line.
  3. Save with UTF-8 encoding and a .m3u8 extension if any names use accents or non-Latin scripts.
  4. Load the file in Decodr to confirm every entry parsed as expected.

Common mistakes

  • A missing #EXTM3U header, which makes players treat the file as a bare URL list without metadata.
  • Metadata and URL separated by a blank line, breaking the pairing.
  • Unquoted attribute values, so group-title=Live Sports truncates at the space.
  • Windows line endings mixed with Unix ones, which some strict parsers reject.
  • Saving as Latin-1 while using accented channel names, producing garbled text.

Opening an M3U file in a browser player

Decodr parses the playlist client-side and never uploads it. Bring your own file or URL — Decodr supplies no playlists and hosts no streams. To load a full channel list, use the online M3U player. The format is neutral: legality depends entirely on the content the URLs point to and whether you are authorised to access it.

Frequently asked questions

What is an M3U playlist?

A plain text file listing media locations, one per line, optionally annotated with #EXTINF metadata such as a title, logo and group. It contains no video itself — only pointers.

How do I open an M3U file?

Any text editor can read it, and any M3U-capable player can play it. In the browser, open the file in Decodr and each entry becomes a playable item in a searchable channel list.

What is the difference between M3U and M3U8?

It is the same playlist format. M3U is the original extension, usually Latin-1 encoded; M3U8 is the UTF-8 version, which became the standard for HLS manifests and playlists with non-ASCII names.

Is an M3U file a video?

No. It is a few kilobytes of text. The video lives wherever the URLs inside it point, which is why an M3U file alone cannot be 'converted' to video.

What does #EXTINF mean in an M3U file?

#EXTINF is the extended information tag. It holds the duration (-1 for live streams), optional attributes such as tvg-logo and group-title, and after the comma, the channel or track display name.

What is the #EXTM3U header for?

It marks the file as an extended M3U playlist. A file without it is a plain list of URLs; with it, players know to expect #EXTINF metadata lines.

What are tvg-id and tvg-logo tags?

They are IPTV attributes: tvg-id identifies the channel so it can be matched to electronic programme guide data, and tvg-logo points to the channel's artwork image.

What is group-title in an M3U playlist?

group-title is the category a channel belongs to, such as News or Sports. Players like Decodr use it to build filters and sections in the channel list.

Can I edit an M3U playlist myself?

Yes. Because it is plain text, you can open it in any editor to rename channels, reorder lines, remove entries or change group-title categories, then save and reload it.

Are M3U playlists legal?

The format itself is an open standard used by broadcasters, podcasts and media servers. Legality depends entirely on the content the URLs point to and whether you are authorised to access it.

Where can I get an M3U playlist?

Legitimate sources include an IPTV provider you subscribe to, free-to-air broadcasters that publish streams, your own media server software, or playlists you create yourself.

How do I play an M3U playlist in a browser?

Use a browser-based M3U player like Decodr: paste the playlist URL or open the local file, and each entry becomes playable. Nothing is uploaded — parsing happens on your device.

How do I create my own M3U playlist?

Open any text editor, put #EXTM3U on the first line, then for each channel add a #EXTINF line (for example #EXTINF:-1 group-title="News",Channel Name) followed by the stream URL on the next line. Save the file as .m3u or .m3u8 and open it in Decodr.

How do I add channel logos to an M3U playlist?

Add a tvg-logo attribute to each #EXTINF line pointing at an image URL, for example #EXTINF:-1 tvg-logo="https://example.com/logo.png",Channel Name. Players like Decodr display the artwork beside the channel name.

What is the difference between M3U and PLS playlists?

M3U is a simple line-based list with #EXTINF metadata, dominant in IPTV and HLS. PLS is an INI-style format from the Winamp/Shoutcast era, still used by some internet radio stations. Most modern IPTV tooling standardised on M3U8.

How do I convert an Xtream Codes login into an M3U URL?

Most Xtream-based providers expose a standard playlist at http://server:port/get.php?username=USER&password=PASS&type=m3u_plus&output=ts. Paste that URL into Decodr like any other playlist link.

Why is my M3U playlist not loading in any player?

Check that the file starts with #EXTM3U, that each #EXTINF line is followed by a URL, and that the file is saved with UTF-8 encoding if it contains non-English channel names. A 404 when fetching a playlist URL usually means the provider rotated or expired the link.

How do I fix channels that appear in the list but will not play?

The playlist is fine — the stream URLs behind those entries are offline, expired or geo-blocked. Refresh the playlist from your provider; if specific groups fail consistently, ask the provider whether those channels moved.

Can I merge two M3U playlists into one?

Yes. Because the format is plain text, copy the #EXTINF/URL pairs from one file into the other (keeping a single #EXTM3U header at the top), save, and reload. Give merged channels distinct group-title values so you can still filter them.

Final thoughts

The M3U format has outlived nearly every media player that popularised it because it asks almost nothing of anyone: one line of metadata, one line of location, repeat. That simplicity is why it carries both a 40-track album playlist and a 10,000-channel IPTV list, and why it became the foundation of HLS. Once you can read the file, you can debug it — and a playlist you can read is a playlist you control.

Ready to play a playlist you already own?

Open the Decodr player

Related guides