M3U8 Validator
Check M3U8 playlist syntax, inspect HLS tag relationships, and identify structural issues with clear explanations and line-by-line findings.
Validate playlist text directly in your browser. Remote URL checks depend on the source server's accessibility and CORS configuration.
Validator
The example is illustrative data, not a live stream. It contains deliberate mistakes so you can see how findings look.
Your browser requests only the playlist file itself, without cookies. Segments, keys, and other referenced files are never fetched. If the server does not allow cross-origin reads (CORS), the URL cannot be inspected; open it in a new tab, copy the text, and use Paste playlist instead.
Results
Findings
Not checked
Playlist source
About playlist validation
What is an M3U8 validator?
An M3U8 validator reads a playlist and checks it against the grammar and tag rules of HTTP Live Streaming (HLS). It reports malformed lines, missing required values, and tags that contradict each other, so you can fix a playlist before a player, packager, or CDN trips over it.
What can this validator detect?
- Syntax: a missing #EXTM3U header, non-numeric durations, unterminated quotes, duplicate attributes.
- Tag attributes: required attributes (such as BANDWIDTH), value formats (RESOLUTION as 1280x720, YES/NO flags, allowed enumerations).
- Structure: EXTINF lines without a segment URI, variant streams without a URI, segments longer than the target duration, group references (AUDIO, SUBTITLES, and so on) that point to no declared EXT-X-MEDIA group.
- Unknown tags: listed as information, never as errors, because they may be valid extensions or newer tags.
What can it not guarantee?
Passing this check does not prove that the server is reachable, that CORS allows browser access, that segments exist, that the stream plays in every browser, that codecs are supported, that authentication succeeds, or that the playlist meets every HLS specification requirement. Rules this tool does not evaluate are listed under "Not checked" after every run.
Master Playlist vs Media Playlist
A Master Playlist lists variant streams and renditions; a Media Playlist lists the segments of one stream.
#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=1280000,RESOLUTION=1280x720,CODECS="avc1.4d401f,mp4a.40.2" 720p/index.m3u8
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:6 #EXTINF:6.000, segment001.ts #EXT-X-ENDLIST
These are illustrative snippets only.
Common M3U8 validation errors
- Malformed EXTINF: the duration must be a number, followed by a comma.
- Missing segment URI: every EXTINF must be followed by a URI line.
- Missing or too-small target duration: every segment's duration, rounded to the nearest integer, must not exceed EXT-X-TARGETDURATION.
- Malformed attributes: an unclosed quote or an unquoted string value shifts every later attribute.
- Invalid bandwidth fields: BANDWIDTH and AVERAGE-BANDWIDTH are plain integers in bits per second.
- Wrong tag relationships: a group named in an AUDIO attribute that no EXT-X-MEDIA tag declares.
How to fix playlist errors
- Fix errors in line order; one broken quote can cause several later findings.
- Select a finding to jump to its line in the source viewer.
- Compare the line with the suggested form, which is an illustration and not a verified correction.
- Correct the playlist at its source (packager or encoder settings), not only in the copy you pasted.
- Validate again, then test playback and network access separately.
FAQ
What is an M3U8 file?
A UTF-8 text playlist used by HLS. It lists either variant streams (Master Playlist) or media segments (Media Playlist).
What does an M3U8 validator check?
This one checks line syntax, attribute-list syntax, tag values, required attributes, and a set of relationships between tags, such as EXTINF followed by a URI. See "What can this validator detect?" above.
Does a valid playlist guarantee that the stream plays?
No. Playback also depends on segment availability, codecs, encryption keys, network access, CORS, and the player.
Why is my playlist valid but the video does not play?
The cause is usually outside the playlist text: missing or blocked segments, expired tokens, CORS headers, unsupported codecs, or key access. This tool does not test those.
Why can't the validator fetch my URL?
Browsers only let a page read another site's response if that site sends permissive CORS headers. Other causes are authentication, geo-restrictions, mixed content (an http URL from an https page), timeouts, or an unreachable host. The browser does not say which. Paste the playlist text instead.
What is the difference between a warning and an error?
An error is a problem under the rules this tool checks. A warning is suspicious or may cause interoperability trouble but is not definitely invalid. Information items are observations. "Not checked" items are rules the tool did not evaluate.
Can the validator check remote media segments?
No. It never downloads segments, sub-playlists, or keys. It checks only the syntax of the references in the playlist.
Does the tool modify my playlist?
No. Your text is never changed. Suggested fixes are shown beside the findings for you to apply yourself.
Does it decrypt encrypted HLS content?
No. It reads EXT-X-KEY attributes for syntax and does not request or use keys.
Is pasted playlist content uploaded to a server?
No. Pasted text is processed by JavaScript in your browser and is not sent anywhere. In URL mode your browser requests the URL you entered directly from that server. Copied reports redact query values from URLs, but review them before sharing.
Related tools
- M3U8 Analyzer
Explains what a playlist contains: streams, segments, and metadata. - Embed Generator
Create embed code for playing an M3U8 stream on a web page. - Customize Player
Adjust the look and behavior of the PlayAnyM3U8 player.