New: Enveu Flow is now generally available — automate media operations alongside Experience Cloud. Learn more

What Is an M3U8 File and How Does It Work in Streaming?

M3U8 Files
An M3U8 is a plain-text playlist file, encoded in UTF-8, that tells a video player where to find the pieces of a stream. It's the backbone of HLS (HTTP Live Streaming): instead of one big video file, the content is chopped into short segments, and the M3U8 lists those segments — and the different quality versions — so the player can download them in order and switch bitrate on the fly. Open it and you'll just see a list of URLs and tags.

What is an M3U8 file?

An M3U8 file is the UTF-8 version of the older M3U playlist format. It doesn't contain any video itself — it's a text index that points to media. In streaming, it's the manifest a player reads to assemble a video from many small chunks. The ".m3u8" extension is what you'll see behind almost every HLS stream on the web. Think of it as a table of contents for a stream: it doesn't hold the video, it tells the player exactly which pieces to fetch and in what order.

What is the M3U8 file format?

The M3U8 format is a simple text format built from two things: URLs (pointing to media segments or to other playlists) and tags that start with #EXT. Every M3U8 opens with #EXTM3U, and tags like #EXT-X-STREAM-INF (describes a quality rendition), #EXTINF (segment duration) and #EXT-X-ENDLIST (marks the end of a video-on-demand stream) tell the player how to interpret the list. Because it's just UTF-8 text, you can open an M3U8 in any text editor and read it — there's no video data inside, only pointers and instructions.

M3U vs M3U8: what's the difference?

M3UM3U8
EncodingLocal/legacy encoding (Latin-1)UTF-8 (Unicode)
CharactersLimited — can garble non-English textFull international character support
OriginOriginal Winamp playlist formatModern UTF-8 version, used by HLS
Used forLocal audio/video playlistsWeb/adaptive streaming (HLS)

The two are essentially the same format with a different text encoding. M3U is the original; M3U8 is the same idea saved as UTF-8, so it can correctly handle any language's characters in file names and paths. That's why modern streaming — which is global and full of non-Latin URLs and titles — standardised on M3U8. In short: all M3U8 files are M3U playlists; the "8" just signals UTF-8 encoding.

How M3U8 works in HLS

HLS structure: master M3U8 playlist points to variant playlists for each bitrate, which list the video segments

HLS uses two levels of M3U8:

  1. Master playlist — the top-level .m3u8 lists the available renditions (e.g. 1080p, 720p, 480p), each with its bitrate and resolution.
  2. Variant (media) playlists — one per rendition, listing the actual segments (short .ts or fragmented-MP4 files, typically 2–10 seconds each) in play order.
  3. Adaptive switching — the player starts at one rendition and, as bandwidth changes, jumps to a higher- or lower-bitrate variant between segments for smooth playback.
PartWhat it is
Master playlist (.m3u8)Top-level manifest listing the available quality renditions and their bitrates.
Variant playlist (.m3u8)One per rendition; lists the segments for that quality in play order.
Segment (.ts / .m4s)A short chunk of the actual video, typically 2–10 seconds long.
Tags (#EXT-X-…)Directives inside the file that describe bitrates, durations and stream info.

Is an M3U8 a video file?

No — an M3U8 is not a video. It's a manifest: a text file that references video, the way a playlist references songs rather than containing them. The actual video lives in the segment files (.ts or .m4s) the M3U8 points to. This is exactly why you can't send someone "the video" as a single M3U8, and why an M3U8 opened without its segments plays nothing. It's the map, not the territory — the player uses it to go and fetch the real media over the network.

How do you open or play an M3U8 file?

Because it's just a manifest, you don't "watch" an M3U8 directly — you point a compatible player at it. Most modern browsers and mobile players support HLS natively or via a library; desktop players like VLC can open an M3U8 URL and stream it. Opening the file in a text editor shows the tags (like #EXTM3U, #EXT-X-STREAM-INF) and segment URLs. If you double-click an M3U8 and nothing plays, it's usually because the player can't reach the segment URLs it points to, or the stream is offline — the file itself is fine, it's just an index.

Common M3U8 tags explained

A handful of tags do most of the work inside an M3U8, and reading them makes the file far less mysterious:

  • #EXTM3U — the header; every valid M3U8 starts with it.
  • #EXT-X-VERSION — the HLS protocol version the playlist uses.
  • #EXT-X-STREAM-INF — in a master playlist, describes one rendition (bandwidth, resolution, codecs); the next line is that rendition's playlist URL.
  • #EXT-X-TARGETDURATION — the maximum segment length in the playlist.
  • #EXTINF — the exact duration of the segment that follows.
  • #EXT-X-ENDLIST — marks a finished (video-on-demand) stream; its absence signals a live stream.

Together these tell the player everything it needs: which qualities exist, how long each chunk is, and whether the stream is live or complete. That's the whole "language" of an M3U8 — a short list of directives wrapped around a set of URLs. On Android, a media player like ExoPlayer reads exactly this manifest to stream HLS.

Is it safe to open an M3U8 file?

An M3U8 itself is just text, so opening one in a player or text editor is low-risk — there's no executable code inside, only URLs and tags. The thing to be cautious about is where the file came from: because it points to remote segment URLs, an M3U8 from an untrusted source could direct your player to unwanted or pirated content. As long as it's from a legitimate service, an M3U8 is a completely normal part of how streaming works. You're not downloading a program — you're handing your player a list of links to fetch. To protect your own streams, HLS can be encrypted — see what HLSe (HLS encryption) is.

M3U8 and adaptive bitrate streaming

The whole point of the M3U8 + segment structure is adaptive bitrate (ABR) streaming: by offering multiple renditions and short segments, the player can match quality to each viewer's connection in real time. That's how a stream stays smooth on a train and sharp on fibre — the same content, delivered through one M3U8 manifest. As bandwidth rises or drops, the player quietly steps up or down a rendition between segments, so viewers get the best quality their connection can carry without buffering. See how quality tiers work in our streaming resolutions guide.

M3U8, HLS and live streaming

M3U8 handles both on-demand and live streaming. For live, the variant playlist is updated continuously — new segments are appended as they're encoded and old ones drop off, and there's no #EXT-X-ENDLIST tag, which is how the player knows the stream is ongoing rather than a finished video. That live-updating manifest is what lets HLS deliver live sport, events and IRL streams to millions of players over ordinary HTTP (which runs on TCP, not UDP) and CDNs. The same M3U8 mechanics underpin nearly all internet video you watch today. For the full picture across formats, see how streaming manifest files (HLS and DASH) work.

Delivering HLS at scale

Producing correct M3U8 manifests, segmenting content into multiple bitrates and delivering them fast worldwide is exactly what a streaming platform automates. Enveu's Content Manager transcodes your content to adaptive bitrate up to 4K, packages it as HLS (and DASH), and delivers it over a CDN across every device — so you get standards-compliant M3U8 delivery without hand-building manifests. It's part of Experience Cloud; for delivery specifics see video CDN providers.

Frequently asked questions
An M3U8 is a UTF-8 text playlist file used by HLS streaming. It contains no video itself - it's a manifest that lists the video segments and the different quality versions a player downloads to assemble and stream the content.
You point a compatible player at the M3U8 rather than opening the video directly. Most browsers and mobile players support HLS natively or via a library, and desktop players like VLC can open an M3U8 URL. In a text editor you'll see tags and segment URLs.
They're the same playlist format, but M3U8 is encoded in UTF-8 so it can handle international characters. M3U8 is the version used by HLS streaming on the modern web.
Not exactly - M3U8 is the playlist/manifest format, and HLS (HTTP Live Streaming) is the protocol that uses M3U8 files plus media segments to deliver adaptive streams. Every HLS stream relies on M3U8 files.
Because the M3U8 + segment structure enables adaptive bitrate streaming: the manifest lists multiple quality renditions and short segments, so the player can match quality to each viewer's connection in real time for smooth playback.
Explore the Enveu platform

Ready to launch your streaming platform?

Talk to our team about building your OTT experience with Enveu Experience Cloud and Enveu Flow.

Book a demo

More from Enveu