5 min read

What an m3u8 file is and how to download an HLS stream

A common story: someone finds a link ending in m3u8 in developer tools, downloads it, and ends up with a text document a few kilobytes long. There is no video in it and never was.

An m3u8 is a table of contents, not video

HLS stands for HTTP Live Streaming, a delivery method built so the stream can adapt to your connection speed. The video is cut in advance into short pieces, typically 2–10 seconds each, and every piece is stored as its own file.

The m3u8 file is the playlist: a plain text list of the addresses of all those segments in order. The player reads it, fetches the pieces one after another and stitches them together during playback. Hence the size — a list of links weighs kilobytes whether the video runs five minutes or an hour.

An analogy: the m3u8 is a book's table of contents. Downloading the contents page does not get you the book.

Why go to all that trouble

  • Adaptive quality. There are usually several playlists, one per resolution, and the player switches between them mid-playback when bandwidth drops.
  • Fast start. There is no wait for a whole file — the first segment is enough to begin.
  • Live broadcasts. The segment list grows as the broadcast goes on, which a single file cannot do.

Master playlist and media playlist

An m3u8 often comes in two levels. The master playlist holds not segments but links to other playlists, one per quality. Only inside those are the addresses of the real pieces. So opening an m3u8 and finding several more m3u8 links is normal.

How to get a normal file

You need to download every segment and merge them into one container. Doing that by hand is possible but an hour-long video means hundreds of segments. Tentek Video Downloader handles it: it spots the playlist among the page requests, picks the quality you choose, fetches the segments and assembles the file.

  1. 1Open the page and start playback — until the player requests the playlist there is nothing to intercept.
  2. 2Click the Tentek icon: the streams it found appear as a list.
  3. 3Choose the entry with the highest resolution.
  4. 4Wait for it to finish — assembly takes longer than a plain download, because the file is built locally.

When it will not work

  • Segments encrypted with DRM. On paid streamers the key is only available to the browser's protected module, so such a stream cannot be assembled.
  • Signed links that live for minutes. Playback works, but the addresses expire before a download can finish.
  • A live broadcast in progress. Until it ends the playlist has no end — only the part already aired can be saved.

Ordinary AES encryption inside HLS itself is not an obstacle: there the key sits alongside the playlist and is available to the player, and therefore to the extension. DRM is the impassable case, and it is a different technology.

Common questions

Why does a downloaded m3u8 weigh only a few kilobytes?

Because it is a text list of segment links, not the video itself. Its size does not depend on how long the clip is.

How does HLS differ from DASH?

The idea is the same — segmenting and adaptive quality. HLS came from Apple and uses m3u8 playlists; DASH is an open standard with an mpd manifest. The extension handles both.

Can I download a broadcast that is airing right now?

Only the part already aired. A live playlist keeps growing and has no end until the broadcast finishes.

Why does assembly take longer than a normal download?

The file is built on your computer: dozens or hundreds of segments download first, then they are merged into one container.

The file came out with no sound

Then only the video track was saved. Where audio is a separate track you need the entry marked as merged — the Vimeo piece covers this in detail.

Add to Chrome — free

Free. No sign-up.