M3U8 parser: inspect an HLS playlist

Paste an HLS playlist (.m3u8) or open the file to see what is inside: the variants with their bitrates, resolutions and codecs, audio and subtitle tracks, or the segments with their durations, plus common mistakes. Free, no sign-up.

Runs entirely in your browser. Nothing is fetched, and tokens and logins in addresses are masked.

How an HLS stream is put together

HTTP Live Streaming (HLS) cuts a stream into short files, usually 2 to 10 seconds each, and describes them in plain-text playlists that end in .m3u8. A master playlist offers the same stream in several versions, called variants, from a small low-bitrate picture to full HD or 4K. The player measures your connection and switches between variants as it plays, which is why picture quality can change mid-programme. Each variant points to a media playlist that lists the segments in order with their durations.

On a live channel the media playlist is a sliding window: the player reloads it every few seconds, new segments appear at the end and old ones drop off the top. A recording or film ends with #EXT-X-ENDLIST and lists every segment from start to finish, so the parser can add up its total length.

Tags the parser reads

#EXT-X-STREAM-INF

One variant in a master playlist: BANDWIDTH (peak bits per second), AVERAGE-BANDWIDTH, RESOLUTION, FRAME-RATE, CODECS and the audio or subtitle group. The next line is the variant's own playlist.

#EXT-X-MEDIA

An alternative audio, subtitle or caption track: TYPE, GROUP-ID, NAME, LANGUAGE, DEFAULT and AUTOSELECT. Variants point to it by group.

#EXT-X-I-FRAME-STREAM-INF

A keyframe-only variant used for fast scrubbing and thumbnails.

#EXT-X-TARGETDURATION

The longest segment, in whole seconds. Every segment must round to this or less.

#EXT-X-MEDIA-SEQUENCE

The number of the first segment. On a live stream it climbs as old segments drop off.

#EXTINF

The duration of the next segment in seconds, then an optional title.

#EXT-X-ENDLIST

No more segments will be added: video on demand, or a live event that has ended.

#EXT-X-KEY

Segments after it are encrypted, usually METHOD=AES-128 or SAMPLE-AES, with the key at the given URI.

#EXT-X-DISCONTINUITY

The next segment changes encoding or timeline, for example at an advert break.

#EXT-X-PROGRAM-DATE-TIME

Ties a segment to a real date and time, used for live rewind and guide alignment.

Reading codec strings

The CODECS attribute uses short codes. avc1.640028 is H.264: 64 is the High profile and 28 (hex for 40) is level 4.0, enough for 1080p. hvc1 and hev1 are H.265 (HEVC); .2. after them is the Main 10 profile, used for HDR. mp4a.40.2 is AAC-LC audio, mp4a.40.5 HE-AAC, and ec-3 Dolby Digital Plus. The parser writes each one out in plain words. Whether a TV can play a variant depends on its decoders: a box without HEVC support cannot play hvc1 variants, so the player falls back to an H.264 one if the stream offers it.

Problems it points out

  • Segments longer than the target duration. Strict players stop or skip when a segment overruns #EXT-X-TARGETDURATION.
  • Variants without CODECS. The player has to download a segment to find out what it is, and may pick a variant the TV cannot decode.
  • Audio groups that do not exist. A variant that names an audio group no #EXT-X-MEDIA defines plays without sound on some players.
  • Missing BANDWIDTH or TARGETDURATION. Both are required by the HLS specification.
  • A VOD playlist without ENDLIST. The player keeps reloading it as if it were live.

A live media playlist with no #EXT-X-ENDLIST is normal, not an error: the parser notes it so you know the segment list is only the current window. Encrypted segments are reported by method only; the key address is never shown.

To turn the bitrates into an internet speed, see internet speed for IPTV. For channel lists rather than streams, use the M3U checker, and for an Xtream login, the Xtream to M3U converter (its m3u8 output asks the server for HLS).

Questions

Is the playlist sent anywhere?
No. The text you paste or the file you open is parsed by JavaScript in your browser. The page does not fetch the playlist, its variants or its segments, and addresses are shown with tokens, usernames and passwords masked.
Why can I not paste the .m3u8 link?
The tool only reads playlist text. Fetching a stream link from the page would be blocked by most servers, and it would mean loading someone's stream through this site. Open the link in your browser or a text editor and paste what it shows.
What is the difference between a master and a media playlist?
A master playlist lists the versions of one stream (variants at different resolutions and bitrates, plus audio and subtitle tracks). A media playlist lists the actual video segments of one of those versions, each with its duration.
What do BANDWIDTH and AVERAGE-BANDWIDTH mean?
BANDWIDTH is the peak bitrate of the variant in bits per second, the number a player uses to decide whether your connection can keep up. AVERAGE-BANDWIDTH, when present, is the typical rate and closer to the data you will actually use. The internet speed calculator turns bitrates into the Mbps to plan for.
Is this the same as an IPTV M3U playlist?
No. Both use the M3U format, but an IPTV playlist lists channels (with tvg-id, logos and groups), while an HLS .m3u8 describes one stream. For channel lists, use the M3U checker or editor.

Watch it on your TV

IPFlix Pro Player for Android TV, Google TV and Fire TV plays HLS, MPEG-TS, MKV, MP4 and other formats. Picture quality, 4K and HDR depend on the stream and the TV.

  1. Install IPFlix on the TV and open Add Playlist.
  2. Scan the QR code on the TV with your phone.
  3. On the phone, paste your provider's M3U link or type the Xtream login.

7-day free trial with everything unlocked, counted from your first playlist. IPFlix does not provide channels or content.