Back to guides
Streaming HLS

M3U8 / HLS Online Playback Guide

Published: Updated: Difficulty: Beginner

What Is M3U8?

M3U8 is the playlist file used by the HLS (HTTP Live Streaming) protocol. It is a UTF-8 text file that records the addresses of the video segments. The video is cut into a series of TS segments, which are then played back in order through the M3U8 index — this is what makes adaptive bitrate streaming and live broadcast possible.

How to Play Online

  1. Get a video URL that ends with .m3u8.
  2. Open the M3U8 online player.
  3. Paste the link and hit play.
  4. Use controls such as fullscreen and playback speed.

Supported Protocols

  • HLS (M3U8): Video-on-demand and live streaming, with native browser support or hls.js.
  • RTMP / HTTP-FLV / WebSocket-FLV: Use the RTMP player instead.

Frequently Asked Questions (FAQ)

Why Streams Are Split Into Segments

A single huge video file is fragile: one network hiccup stalls everything, and the player has to guess what quality your connection can sustain. HLS solves both problems by cutting the video into a few seconds of TS segments each and listing them in the M3U8 playlist. The player fetches segments one at a time, so a slow stretch only lowers the quality rather than stopping playback — that is what "adaptive bitrate" means in practice.

Segmenting is also why live streaming works on the web. The server keeps writing new segments to the playlist as the event happens, and every client just keeps reading the playlist for the next entry. The same mechanism powers both a recorded video-on-demand title and a live channel; the difference is only whether the playlist keeps growing.

Common Playback Failures and What They Mean

  • CORS rejection. The browser fetches segments with JavaScript, so the segment server must allow the origin. A link that plays in VLC but not in any browser is almost always CORS.
  • Expired or signed URLs. Many CDNs attach a timestamp token to the playlist link. Once it expires, every segment request fails at once — re-fetch a fresh URL from the source.
  • Mixed content. An HTTPS page cannot load an HTTP stream. If the site address starts with https, the m3u8 URL must too.
  • Region restrictions. The playlist may load but segments return an error for your region. No player setting fixes that; it is enforced by the source.
The link is valid but won't play — why?

This is usually caused by hotlink protection or a required User-Agent/Referer. Try switching networks or getting a clean link.

Can I watch live streams?

Yes, HLS live streaming is supported; for RTMP live streams, use the RTMP player.

Why does my M3U8 link play in VLC but not in the browser?

Desktop players ignore CORS; browsers enforce it. If the segment server does not send cross-origin headers for the page playing the stream, the browser blocks the segments even though the playlist loaded.

Can I download a video from an M3U8 link?

A playlist is just an index — downloading means fetching every segment and joining them, which the player itself does not do. Whether that is allowed depends entirely on the source and its terms; check permissions first.

Why does playback start slowly on some streams?

The player must fetch the playlist, then at least one segment, before the first frame appears. Long segments (10 seconds or more) or a distant CDN node stretch that startup time.

References

  1. HLS specification — IETF draft: https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis
  2. hls.js: https://hls-js.netlify.app/

Related Reading