HLS/DASH Stream Checker

Paste a stream URL (.m3u8 / .mpd / MP4) to check whether it plays in a browser. When it does not, the tool diagnoses CORS, HTTP status, encryption and codec problems, and shows the manifest contents and segment download speeds.

✨ How it works

  • Paste an .m3u8, .mpd or MP4 URL into the Stream URL field and press Check (Enter works too).
  • Switch the tabs under the player to see diagnostics, the manifest, live stats and the event log.
  • Quality, audio, subtitles and playback speed can be switched by hand under the player. For live streams, Go live jumps back to the edge.
  • The Share & embed tab builds a short URL, an iframe snippet and CLI commands. The History tab re-checks a URL you used before.

🪄 Formats and what each tab shows

Supported formats

HLS (.m3u8) plays through hls.js, DASH (.mpd) through dash.js, and direct MP4/WebM links in the video element. Where MSE is unavailable (Safari), native HLS takes over.

Diagnostics tab

Ten checks from mixed content to codec support, each marked OK / Warn / Fail with the cause and the fix. Copy report turns them into text with your environment details.

Manifest & Stats tabs

Variant ladder, VOD/live detection, encryption and the raw manifest, plus per-segment download time and throughput — enough to tell a slow network from a slow origin.

Query parameters

Open the page as ?url=STREAM&autoplay=1&muted=1&t=30&ui=embed and it starts in exactly that state. The full table lives in the Share & embed tab.

🔒 Data handling & contact

Your browser fetches the stream directly; our servers are never involved. History stays in this browser (localStorage). Only when you create a short URL is it registered with share.omikuji.dev. Found a bug? Use the contact form at the bottom of the page.

❓ Troubleshooting

Nothing plays and the player stays black

Check the Manifest fetch and CORS rows first. If CORS fails, the origin needs an Access-Control-Allow-Origin header. The Log tab keeps the hls.js error types (networkError, mediaError and so on) with timestamps.

There is no sound, or playback does not start

Browsers block unmuted autoplay, so playback starts muted by default. Uncheck Muted and press play on the player to hear the audio.

Encryption says AES-128 or DRM

AES-128 plays as long as your browser can also reach the key URI. SAMPLE-AES and DRM systems such as Widevine need a license exchange, so those streams may not play here.

The snapshot button does not save anything

If the origin does not allow CORS, the canvas is tainted and the frame cannot be exported. With Access-Control-Allow-Origin in place, snapshots work.

  1. 1

    Paste the stream URL

    Put the .m3u8, .mpd or MP4 URL you want to verify into the input field.

  2. 2

    Press Check

    The player tries to play it while the tool diagnoses CORS, HTTP status and the manifest contents.

  3. 3

    Share the result

    The Share tab gives you a short URL, an iframe snippet and CLI commands so others can open the same state.

Options
Enter a URL and press Check to play it here.
Idle

Playback diagnostics

Check a URL and the diagnosis will appear here.

    Manifest analysis

    Check a URL to see the playlist contents.

    Playback stats

    Stats appear once playback starts.

    Segment loads (last 20)

    No segments loaded yet.

    Event log

    • No events yet.

    Share this state

    A URL that reproduces the current input and options. Short links are created by share.omikuji.dev.

    iframe embed code

    Embeds the player-only mode (ui=embed).

    Check from the CLI

    If the browser cannot play it, these commands help narrow the problem down.

      Query parameters

      Append parameters to the URL and the page opens in exactly that state — handy for runbooks and monitoring bookmarks.

      Parameter Value Description
      url https://…/x.m3u8 Stream URL to check (src also works)
      autoplay 1 / 0 Start playback automatically (default: 1)
      muted 1 / 0 Start muted (default: 1)
      loop 1 / 0 Loop playback
      t 30 Start position in seconds (VOD only)
      ui full / embed embed shows the player only
      hud 1 / 0 Show the stats overlay
      lowlatency 1 / 0 LL-HLS low latency mode (default: 1)
      tab diag / manifest / … Initial tab (diag/manifest/stats/log/share/history)

      Checked history

        History is stored only in this browser.

        ✨ Features

        • Verify HLS (.m3u8), DASH (.mpd) and direct MP4 playback in the browser just by pasting a URL.
        • When playback fails, get the reason: CORS, HTTP status, mixed content, encryption or codec support.
        • See the variant table of the master playlist, segment download speed, live latency and buffer level.
        • Share the exact state with query parameters (?url=...), and generate iframe embed code and ffplay commands.

        💡 Great for

        Smoke-testing a stream

        After changing an encoder or CDN setting, confirm playback in the same browser environment your viewers use.

        Finding out why it will not play

        CORS, 404 or DRM? Copy the diagnostic report and send it straight to your streaming provider.

        Reviewing your ABR ladder

        The variant list shows whether the intended resolutions, bitrates and codecs are actually published.

        Runbooks and monitoring links

        Bookmark a URL with ?url= and a single click re-runs the same playback check.

        🔒 Privacy

        The stream URL you enter is fetched directly by your browser from the origin; it is never sent to or stored on our servers. History stays in your browser (localStorage). Only when you press the share button is the URL registered with share.omikuji.dev.

        ❓ FAQ

        Why does my stream not play?

        The most common cause is missing CORS headers on the origin: playing from another site requires Access-Control-Allow-Origin. Other causes are 404/403, mixed content (an http stream on an https page) and DRM. The diagnostics tab names the cause and the fix.

        Is my URL sent to your server?

        No. Your browser fetches the stream directly and our servers are never involved. Only when you press the share button is that URL registered with share.omikuji.dev.

        Can I start playback from a query parameter?

        Yes. Open the page with ?url=STREAM_URL and it checks and plays automatically. autoplay, muted, loop, t (start seconds) and ui=embed are supported too, which also makes iframe embedding easy.

        Does it support DASH and plain MP4?

        Yes. .mpd is played with dash.js and direct .mp4/.webm links play in the video element. HLS uses hls.js, falling back to native playback on Safari.