Source setup

What Is an M3U Playlist? Format, Examples and Player Setup

What an M3U playlist is, how the 2 core RFC 8216 tags EXTM3U and EXTINF work, the real M3U vs M3U8 difference, and how a player like IPTV Expert loads one.

Laptop and coffee on a desk, representing the technical, text-editor side of building an M3U playlist
IPTV Expert 8 min read

An M3U playlist is a plain-text file. That's the whole definition. The confusion around it comes from two different communities extending that same simple format in different directions.

Streaming engineers use M3U8 the way RFC 8216 defines it: as the playlist format behind HLS video streaming. IPTV providers use plain M3U informally, adding their own tags for channel names and logos that were never part of any official spec. Both are correct uses of the format. This guide separates the two clearly, shows an annotated example of each, and explains where the file fits once you're ready to load it into a player.

Key takeaways

  • An M3U playlist is a plain-text list of stream entries starting with the tag #EXTM3U.
  • M3U8 specifically means the file is UTF-8 encoded, per RFC 8216 section 4.1. That's the practical difference from plain M3U.
  • IPTV-style tags like tvg-id and group-title are a widely used convention, not part of the official HLS specification.

What is an M3U playlist, exactly?

An M3U playlist is a text file that tells a media player what to play and in what order, one entry per line. In its extended form, the file opens with #EXTM3U as its very first line, a requirement defined in RFC 8216, section 4.3.1.1.

Each entry can be preceded by an #EXTINF tag, which the same RFC defines in section 4.3.2.1 as #EXTINF:<duration>,[<title>]: a duration value followed by an optional title. That's the entire core format: a header line, then pairs of metadata and URLs. Everything else you'll see in a real-world playlist is an extension layered on top of this minimal structure.

M3U vs. M3U8: what's actually different?

M3U8 specifically means the playlist is encoded in UTF-8, a requirement RFC 8216 states directly in section 4.1. Plain M3U, by contrast, has no fixed encoding convention. It predates any formal requirement and was historically treated as Latin-1 or whatever the local system default happened to be.

M3U M3U8
Encoding Not fixed (historically Latin-1 or system default) UTF-8, required by RFC 8216 §4.1
Governed by a spec? No single owning standard Yes, RFC 8216 (for HLS use)
Typical file extension .m3u .m3u8
Common symptom of a mismatch Garbled accented or non-Latin channel names N/A when encoding is correct

You'll notice the encoding distinction most clearly if a channel name uses accented characters or a non-Latin script. If a player expects UTF-8 and receives a file encoded differently, those characters can render as garbled symbols even though the playlist otherwise works fine. When you see broken characters in channel names but everything still plays, the cause is usually encoding, not the playlist structure itself.

Annotated example — a standard HLS M3U8 playlist

RFC 8216 defines this format directly: a playlist made of segment references, each with its own #EXTINF duration, used to deliver a single stream in chunks. This is the format that actually carries the "M3U8" name in the spec itself.

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:9.009,
segment-000.ts
#EXTINF:9.009,
segment-001.ts
#EXTINF:9.009,
segment-002.ts
#EXT-X-ENDLIST

Every line matters here. #EXT-X-VERSION and #EXT-X-TARGETDURATION are HLS-specific tags from the same RFC, and each .ts file is a short video segment the player fetches in sequence. This is the format web video infrastructure actually runs on. It's rarely what an IPTV provider hands you directly, but it's what your player is often fetching in the background once a source is playing.

Real HLS deployments usually add one more layer on top: a master playlist, tagged with #EXT-X-STREAM-INF, that lists several versions of the same stream at different bitrates or resolutions and lets the player switch between them as network conditions change. A single URL you're given might point to that master playlist rather than directly to the segment list shown above; the player resolves the rest automatically.

Most IPTV-focused explainers skip this layered structure entirely, since IPTV playlists rarely use it. It matters anyway: it's the actual structure a video player is built to understand, even when the M3U file you're handed looks nothing like it.

Annotated example — a typical IPTV-style M3U playlist

IPTV providers extend the base format informally, adding attributes like tvg-id, tvg-logo and group-title to each entry. None of these are defined in RFC 8216. They're a de facto convention that spread across IPTV players and providers because they're useful, not because a standards body specified them.

#EXTM3U
#EXTINF:-1 tvg-id="channel.one" tvg-logo="https://example-provider.test/logo1.png" group-title="News",Channel One
https://example-provider.test/stream/CHANNEL_TOKEN_1
#EXTINF:-1 tvg-id="channel.two" tvg-logo="https://example-provider.test/logo2.png" group-title="Sports",Channel Two
https://example-provider.test/stream/CHANNEL_TOKEN_2

The URLs and tokens above are placeholders — never post or share a real playlist URL publicly. Anyone with the actual link can use your source, the same way anyone with a password can log into an account.

Notice the -1 duration: that's a live-stream convention meaning "no fixed length," distinct from the finite segment durations in the HLS example above. Same tag, different practical meaning depending on which of the two traditions produced the file.

Where does the EPG fit in?

Some M3U files include a url-tvg= header pointing to a separate program-guide file, but the guide data itself lives outside the playlist. The playlist tells a player what streams exist; a separate XMLTV file tells it what's scheduled to air on each one.

That's a deliberate separation, not a limitation. Providers can update guide data on its own schedule, several times a day if programming shifts, without touching the playlist itself. The channel list and the schedule are two independently maintained files that happen to work together.

If your M3U includes a url-tvg= header, a player that supports it can pick up guide data automatically without you entering a second URL by hand. If it doesn't, the guide has to be added separately, which is a different setup step from adding the playlist itself and outside the scope of this article.

How does a player like IPTV Expert use an M3U file?

A player needs only two things to use an M3U source: a name you choose, and the playlist URL itself. That's the exact input IPTV Expert's add-source form asks for, nothing more, and no separate step to parse tags like tvg-logo by hand.

Person holding a phone, representing the moment a playlist URL gets entered into a player's setup form

Once you save those two fields, the app downloads the file at that URL and parses it before treating the source as active. It reads the #EXTINF entries, picks up any group-title and tvg-logo metadata along the way, and builds your channel list from what it finds. If you want the exact click-by-click steps for your device, How to Add an M3U Playlist to IPTV Expert covers Android, iOS, Windows, Mac, Linux, Android TV and Fire TV individually.

If you haven't installed IPTV Expert yet, start from the full download chooser and pick the version for your device, or see Best Free IPTV Players in 2026 if you're still comparing your options.

Conclusion

Three things carry through everything above: an M3U playlist is plain text built around #EXTM3U and #EXTINF; M3U8 specifically means UTF-8 encoding; and the IPTV-style tags you'll see in real playlists — tvg-id, tvg-logo, group-title — are a widely adopted convention layered on top of the format, not something RFC 8216 defines. Once that's clear, setting one up in a player is just two fields: a name, and a URL.

IPTV Expert

Watch on your screen

Download IPTV Expert for your preferred platform.

Download

IPTV Expert does not provide, host or sell channels, playlists or subscriptions.