Tool · inspect

Free HLS Stream Analyzer & M3U8 Inspector

Paste an M3U8 URL. The manifest is fetched and read in your browser, and nothing is sent to a server.

What it reads

Paste a URL. The manifest is fetched and parsed in your browser, then laid out in full: every rendition with its bandwidth and resolution, the codecs declared for each one, audio tracks, subtitle tracks, segment timing. A master playlist lists the variants. A media playlist lists the segments for one variant. This follows the first into the second.

What the results tell you

One rendition means no adaptive ladder. A weak connection has nothing to fall back to, so it stalls. Renditions bunched at similar bitrates are worse than useless: they cost encoding time without widening the range that matters. And a declared codec the target device cannot decode gives you audio over a black frame, which is the failure people most often misread as a dead link.

Segment duration is the other one to watch. Long segments raise latency. Very short ones multiply requests until the overhead itself becomes the problem, which on a mobile connection arrives sooner than most people expect. If the manifest will not load at all, that is a different question and the stream checker answers it faster. No URL to hand? Take one of the HLS test streams.

Reading the quality ladder

Renditions appear in the order the master declares them, with the bandwidth the publisher claims and the resolution the stream carries. Read the two together. A ladder that climbs in bandwidth without climbing in resolution usually means an encoder misconfigured, and a top rung claiming 1080p at 800 kbps is a promise no encoder can keep.

  • Three to five rungs is the usual shape, roughly doubling in bandwidth at each step.
  • Two rungs close together give the player almost nothing to choose between.
  • One rung is not a ladder. There is nothing to fall back to, so a dip in the connection becomes a stall rather than a softer picture.
  • A rendition with no resolution is legal and unhelpful. The player has to fetch a segment before it knows what it was offered.

Codec strings, and streams that play everywhere except here

Each rendition declares its codecs as a short string, something like avc1.64001f,mp4a.40.2. The first part is video, the second audio. A browser reads that string and decides whether it can play the stream before downloading a single segment.

This is where a stream that works in VLC fails on a web page. A desktop player carries its own decoders and will attempt almost anything. A browser checks the declared codec against a much shorter list and declines early. If the analyzer shows a codec you do not recognise and playback fails, that mismatch is the likely cause rather than anything wrong with the manifest itself.

What the analyzer cannot see

It reads the manifest. Worth stating plainly, because a manifest can be perfectly formed while the stream behind it is not.

  • Segments are never fetched. A master that parses cleanly can still name variant playlists that return 404.
  • Encryption is reported, not resolved. An #EXT-X-KEY line tells you segments are encrypted. Whether the key server will answer you is a separate question.
  • Live manifests move. What you analysed a minute ago is not what a player is handed now.
  • Cross-origin rules still apply. If the source refuses the browser, the analyzer cannot fetch the manifest either, and that is a permission failure rather than a malformed file.

Frequently Asked Questions

What information does the HLS analyzer show?

It displays quality levels (resolution, bandwidth, codec, frame rate), audio tracks (language, codec), subtitle tracks, segment count and duration, target duration, and encryption/DRM information. For master playlists, you see the full adaptive bitrate ladder.

Does this work with DASH streams too?

This tool is specifically designed for HLS/M3U8 streams. For DASH (.mpd) streams, the stream checker tool can verify if the URL is accessible and responding.

Why does the analyzer show fewer renditions than the stream advertises?

You are probably looking at a media playlist rather than a master. A media playlist lists the segments for one quality and knows nothing about the others. The manifest type is shown at the top of the results.

The manifest parses but nothing plays. What now?

Check the variant, not the master. A master returning 200 says only that the outer file exists. Each rendition it names is a separate address that can fail on its own, so open one of the variant URLs listed in the results and confirm it answers.

Related Tools

You might also find these tools useful: