M3U vs M3U8: What's the Difference for IPTV Playlists?
M3U8 is an M3U playlist saved as UTF-8, and it is also the playlist format of HLS. What that means for your channel list, and when the extension matters.
Your provider sent a link that ends in .m3u, or .m3u8, or neither, and your player asks for “an M3U playlist”. Are those different things? The short answer: the text format is the same, and the 8 means the file is saved as UTF-8. The longer answer is that .m3u8 is also the extension used by HLS, a streaming protocol, and that second meaning is where most of the confusion comes from. This guide separates the two, so you know what you are looking at and what to fix when a list misbehaves.
Key Takeaways
- M3U and M3U8 are the same plain-text playlist format. An
.m3u8file must be UTF-8; an.m3ufile has no fixed encoding.- HLS, the streaming protocol published as RFC 8216, uses M3U8 playlists to list the short video segments of one stream.
- An IPTV channel list and an HLS stream can both end in
.m3u8, but one lists channels and the other lists pieces of a single channel.- Garbled channel names, such as
Caféinstead ofCafé, are an encoding problem. Saving the list as UTF-8 fixes them.
What is an M3U file?
An M3U file is a plain text playlist: one media location per line, which a player reads from top to bottom. The format was created by Fraunhofer for its WinPlay3 software around 1996 (Wikipedia, M3U), long before anyone streamed television over it. You can open one in any text editor.
IPTV lists use the extended form of M3U. It starts with a #EXTM3U header and puts an #EXTINF line before each address, carrying the name the player shows. Here is a two-channel example:
#EXTM3U
#EXTINF:-1 tvg-logo="https://provider.example/logos/news.png" group-title="News",Example News
http://provider.example:8080/live/user/pass/101.m3u8
#EXTINF:-1 group-title="Sports",Example Sports 1
http://provider.example:8080/live/user/pass/102.ts
A few details are worth knowing:
-1is the duration. For a live channel there is none, so lists use -1.tvg-logoandgroup-titleare IPTV extensions: the channel’s logo and the group it appears under. Wikipedia’s M3U article documents both, along with#EXTGRP, another way to start a named group.#EXTVLCOPTlines pass options that VLC defined, such as the user agent or referrer a channel needs. Players other than VLC read some of them too.
Everything in that example is just text. The video lives at the addresses, not in the file.
What does the 8 in M3U8 mean?
The 8 stands for UTF-8, the text encoding that can store every alphabet. According to Wikipedia’s M3U article, “the use of UTF-8 encoding is mandatory in M3U playlists with the M3U8 file extension”, while for a plain .m3u file the system code page is usually assumed.
In practice most .m3u files are UTF-8 today, so the two extensions often hold identical bytes. The difference shows up with names in accented or non-Latin scripts. If a list was saved in an older Windows or ISO code page and your player reads it as UTF-8, é turns into é and Arabic or Cyrillic names turn into question marks or boxes. The channels still play; only their names are wrong.
M3U8 as the playlist of HLS
The second meaning of .m3u8 comes from HTTP Live Streaming. HLS is a way of delivering video as a series of short files listed in a playlist, which the player keeps reading as new files appear. RFC 8216, published in August 2017 by Roger Pantos of Apple and William May, defines HLS and makes UTF-8 a rule: playlist files “MUST be encoded in UTF-8” and must not start with a byte order mark (section 4.1). A playlist is recognised by a path ending in .m3u8 or .m3u, or by the content type application/vnd.apple.mpegurl or audio/mpegurl (section 4).
An HLS playlist looks like the extended M3U above, but it describes one stream cut into short segments:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:2680
#EXTINF:6.0,
segment2680.ts
#EXTINF:6.0,
segment2681.ts
#EXTINF:6.0,
segment2682.ts
Here #EXTINF is the length of each segment in seconds, and for a live channel the server rewrites this file every few seconds as new segments appear. The RFC allows segments in MPEG-2 Transport Stream, fragmented MP4, packed audio such as AAC, and WebVTT for subtitles (section 3).
Channel list or stream: the comparison
Both files can carry the same extension, so look at what they do instead:
| IPTV channel list | HLS playlist | |
|---|---|---|
| Lists | Channels, one address each | Segments of one channel |
| Written by | Your provider, once for your account | The streaming server, again every few seconds for live TV |
| Typical length | Hundreds to thousands of entries | A handful of segments |
#EXTINF duration |
-1 (live, unknown) |
Segment length, such as 6.0 |
| Extension | .m3u, .m3u8, or none at all |
Usually .m3u8 |
| What reads it | The player’s playlist import | The player’s video engine |
The useful takeaway is the last line of the channel-list example earlier: entries can point to an HLS stream (101.m3u8) or to a raw MPEG-TS stream (102.ts). That difference, not the extension of the list itself, decides whether a channel plays on an iPhone. We explain why in why an IPTV stream won’t play on iPhone.
Does the extension matter when you add a playlist?
Mostly, no. Players decide what a file is by reading it, and many provider links have no extension at all: an Xtream Codes style link ends in get.php?username=...&password=..., and it is still an M3U list. Kibo Player, for example, accepts a list with or without the #EXTM3U header, with a byte order mark or without one, and with Windows or Unix line endings, because real provider lists come in all of those shapes.
Three things matter more than the extension:
- The encoding, which decides whether names display correctly.
- What each entry points to, an HLS
.m3u8stream or a raw.tsstream, which decides which devices can play it. - Whether the server answers your player at all. Some servers send an empty list to apps they don’t recognise. Our guide to Xtream Codes logins explains how to tell.
How to fix garbled channel names
If you have the list as a file:
- Open it in a code editor that shows and changes encodings, rather than a basic notepad.
- Reopen it with the encoding it was really written in. For Western European lists this is often Windows-1252.
- Check that the names now look right, then save it as UTF-8 without a byte order mark.
- Rename it to
.m3u8, so the next program that reads it knows the encoding.
If the list comes from a link you can’t edit, tell your provider which names are broken and ask them to send the list as UTF-8. The fix belongs in the file they generate, and every customer with the same list benefits.
Frequently asked questions
Can I rename an .m3u file to .m3u8?
Only if the text is already UTF-8. A list that contains nothing but plain English letters, digits and punctuation is valid UTF-8 as it is, so renaming is safe. A list with accented or non-Latin names needs converting first, or the names will break.
Is an M3U8 file a video?
No. It is a small text file that tells the player where the video is. Saving it doesn’t save any video, and it stops working when the addresses inside it expire.
My provider offers an M3U link and an M3U8 link. Which one should I use?
Ask what the difference is. Often the “M3U8” option means the channels inside are HLS streams (output=m3u8 in an Xtream-style link), and those play on more devices, including iPhone, iPad and Apple TV. If both lists point to the same kind of stream, use either.
The short version
M3U is the playlist format; M3U8 is the same format in UTF-8, and also the name HLS gave its playlists. When a list loads but names look wrong, fix the encoding. When it loads but a channel won’t play on one device, look at what the channel’s address ends in. And if you are setting up a TV, our guide to adding an M3U playlist on Android TV and Google TV covers getting the list onto the screen without typing it with a remote.
Written by the team that builds Kibo Player. We fact-checked every linked source on 10 November 2026. If something here has changed, tell us, and you can read more about us.



