M3U8 / HLS
Apple invented it, every Apple device plays it, and none of them will save it.
An .m3u8 file is a playlist, not a video: a few kilobytes of text listing thousands of small segments to be fetched in order. That design is why HLS plays flawlessly on every Apple device and why "save this file" produces a text document. Downloading one means fetching every segment and rebuilding a file that never existed.
30 July 2026
Opened without help by
HLS is Apple's own specification and has first-class support everywhere — Safari, AVPlayer, AirPlay. What is not supported anywhere in the system is turning a live stream into a file on disk. Playing and keeping are entirely different problems.
The facts
| Full name | HTTP Live Streaming; the playlist is an M3U in UTF-8 |
|---|---|
| Kind | Streaming protocol, delivered as a text playlist |
| Extensions | .m3u8 (the playlist), .ts or .m4s (the segments it points at) |
| Published | 2009, Apple; standardised as RFC 8216 in 2017 |
| Typical segment length | 2 to 10 seconds each — an hour of video is hundreds to thousands of files |
| Master vs media playlist | A master lists quality levels; each of those points at a media playlist of actual segments |
| Video inside the segments | H.264 or HEVC, occasionally AV1 |
| Live streams | The playlist is refetched every few seconds and grows as the broadcast continues |
A table of contents, not a book
Open an .m3u8 in a text editor and you will find a few dozen lines: a header, some parameters, and a long list of addresses. That is the whole file. The video lives elsewhere, cut into segments of a few seconds each, sitting on a server as thousands of separate small files.
The player reads the list, fetches the first few segments, starts playing, and keeps fetching ahead of itself. When your connection slows, it switches to a lower-quality variant listed in the master playlist — a different set of segments, at a different bitrate — and does it between segments so you see a quality change rather than a pause. This adaptive switching is the reason the format won.
It also explains something that surprises people: there is no single file to have. The film you are watching does not exist as an object anywhere. It is a thousand pieces and a set of instructions.
Why saving it gives you a text file
Because that is what you saved. The browser asked for the address you gave it, received four kilobytes of playlist, and wrote them to disk. Everything you actually watched arrived through a thousand separate requests that the save operation knew nothing about.
Downloading HLS properly means doing what the player does, but to disk: read the playlist, choose a quality variant, fetch every segment in order, and then stitch them into one container. That final step is called remuxing — the video and audio are not re-encoded, only rewritten into a single MP4 with a proper index so the result can be scrubbed.
Two things make this harder than it sounds. Segment addresses are often relative and change per session, so a list fetched an hour ago may be dead. And streams are frequently encrypted with a key referenced in the playlist, delivered separately, and rotated during playback.
Getting one onto a device
Only ever for streams you have the right to keep — your own recording, your own IPTV subscription, a broadcaster who offers a download. What follows is how the mechanism works, not permission to point it anywhere.
- Let a download engine handle the segments
Fetching a thousand files and remuxing them is exactly the job FoxDL's downloader does with an HLS source: it walks the playlist, pulls the segments in parallel, and writes one MP4 that scrubs like a normal file. What arrives is a file, not a folder of pieces.
- Take the direct file when one exists
Many sites serve both HLS and a plain progressive MP4. The MP4 is one request, one file and no rebuilding — always the better option when it is on offer.
- Accept that some cannot be kept
Streams protected with DRM — FairPlay, Widevine — are encrypted end to end and are not downloadable by design. No tool changes that, and one claiming to is lying about something.
Where HLS downloads go wrong
Segments concatenated without remuxing produce a playable file with no index. It plays from the start and jumps nowhere. Remuxing writes the index that fixes it.
A live playlist has no end — it keeps growing. Downloading one is recording, and it stops when you stop it, not when the file ends.
Playlist addresses are usually signed and time-limited. An .m3u8 saved this morning frequently points at nothing by the afternoon.
Questions about this format
Where these facts come from
- RFC 8216 — HTTP Live Streaming IETF
- HTTP Live Streaming Apple Developer
Nearby formats
Your library, finally in one place.
Free to download. No account, no sign-up, nothing to hand over.