freeM3U
Guides/m3u-vs-m3u8

M3U vs M3U8: what actually differs

One is an encoding detail, the other is a streaming protocol — and confusing them is the most common reason a link will not play.

updated 2026-11-13 · 3 min read

The names look like versions of each other, which is why the confusion persists. They are two different things that happen to share a format.

The short answer

  • An .m3u file is a playlist in the original encoding.
  • An .m3u8 file is the same playlist saved as UTF-8 — and in practice, almost always an HLS stream manifest.
  • A channel list you import is an M3U playlist.
  • A single live channel you paste into a player is usually an .m3u8 manifest.

What the 8 means

The 8 is UTF-8. The original format predates widespread Unicode support and often broke on non-Latin channel names. Re-encoding as UTF-8 fixed that, and the extension changed with it. So .m3u8 is, strictly, just an .m3u that will not mangle a Cyrillic or Arabic channel name.

Where the meaning drifted

HLS — HTTP Live Streaming — uses playlists as its transport. A live stream is described by a manifest, and that manifest is conventionally named .m3u8. Apple defined it that way, every player followed, and the extension became shorthand for "this is an HLS stream".

That is why a .m3u8 can be two very different files: a list of hundreds of channels, or a rolling window of six-second video segments. The file extension cannot tell you which — only the contents can.

Telling them apart in practice

  • Open it in a text editor. #EXTINF with a channel name means a channel list.
  • #EXT-X-TARGETDURATION, #EXT-X-MEDIA-SEQUENCE or #EXT-X-STREAM-INF mean a stream manifest.
  • A channel list belongs in your player's playlist or M3U URL field.
  • A manifest belongs in a video URL field, or a browser player.

Why the wrong one fails

Paste a 900-channel playlist into a single-stream field and the player downloads the list and stops, because there is nothing to play. Paste one channel manifest into a playlist importer and you get an import with a single "channel" that has no name. Neither error says what went wrong, which is why both support inboxes are full of them.

Use the M3U checker for channel lists, and the player for a single .m3u8 manifest. If a link returns a channel list when you expected a stream, import it instead.