Parses an m3u8 playlist, downloads every segment and merges them into one video file right in your browser. Multiple quality variants are detected automatically, AES-128/256 encrypted streams are decrypted, and segments that cannot be decrypted are skipped so the rest of the video still completes. Output is a standard .ts or .mp4 file, and the video is never stored on our servers
Enter your content on this page to get started. A complete guide to this tool — features, how it works, use cases, FAQ, and typical examples — is available further down this page.
This tool downloads every segment listed in an m3u8 playlist (the index file used by HLS streaming) and merges them into a single video file you can play anywhere. After you paste an m3u8 address, the tool reads the playlist and works out what it is: a master playlist that offers several quality levels, or a media playlist that lists the segments of one rendition. Master playlists let you pick a quality first; media playlists immediately show the segment count, total duration and encryption method. Press start and all segments are fetched concurrently, encrypted segments are decrypted inside your browser, segments that cannot be decrypted or downloaded are skipped, and everything that succeeded is joined in its original order into one .ts (or .mp4) file.
An m3u8 file is a plain-text index. #EXTINF gives the duration of the segment that follows; #EXT-X-STREAM-INF describes a rendition, with its playlist address on the next line; #EXT-X-KEY declares the encryption method, key address and initialisation vector; #EXT-X-MAP points at the initialisation segment of a fragmented MP4 stream; #EXT-X-BYTERANGE means a segment is only a byte range inside a larger resource; #EXT-X-ENDLIST marks the playlist as complete.
The tool parses those tags, resolves every relative address into an absolute one, then fetches segments in order. For AES-128 and AES-256 it performs CBC decryption in the browser using the declared initialisation vector, falling back to the segment's media sequence number as a 128-bit vector when the playlist does not specify one. Any segment that fails to decrypt, or still fails after a retry, is discarded and counted.
Merging relies on how MPEG-TS is built: a TS file is a sequence of independent 188-byte packets with no global header that must sit at the start, so segments can simply be concatenated into one continuous file. Fragmented MP4 is different — the initialisation segment has to come first, and the following segments are appended to form a valid MP4.
Only download material you own or are licensed to download. Do not use this tool to bypass paywalls or to infringe anyone's rights.
Take a typical encrypted HLS playlist:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="key.bin"
#EXTINF:6.000,
seg-0.ts
#EXTINF:6.000,
seg-1.ts
#EXT-X-ENDLIST
Before downloading, use HTTP Status Checker to confirm the address is reachable and see what content type it returns, and MIME Type Lookup to check which media type a file extension maps to. DNS Lookup helps when a hostname does not resolve, and My IP Address shows your current outbound IP, which is useful when a stream appears to be geo-restricted.