M3U8 Sniffer and Finder

Drop the network log of the page where the video plays. The sniffer lists every .m3u8, .mpd, subtitle, key and video file the player requested, how it is encrypted, which headers it sent and when a signed link expires.

Find M3U8 and MPD links

Paste HAR JSON instead ("Copy all as HAR" in Chrome, Edge or Firefox)

A HAR file contains your cookies and tokens. This page reads it in your browser and never uploads it. Only cookie names are shown, never their values, and nothing is kept after you leave or press Clear. Chrome and Edge export a sanitized HAR by default, without cookies, which is enough here.

An M3U8 sniffer finds the stream links a video player requests. This one reads a HAR file, the network log you export from DevTools, so it sees the .m3u8 and .mpd URLs the player really loaded, even when JavaScript built them. For each one it shows the status, master or variant, the encryption declared in the playlist, the Referer and Origin that the request carried, and when a signed link expires. Subtitle files, key requests and direct video files are listed too, each type with its counter.

How the sniffer works

The HAR file is read by this page with the browser's FileReader and parsed as JSON. Each request in it is checked three ways, and one is enough:

When the HAR holds the response text (plain or base64), the sniffer parses it with the same engine as the M3U8 tester. A master playlist gets its variant count, top resolution, audio and subtitle tracks; a variant playlist gets its segment count, duration and live or on-demand status. Encryption comes from the #EXT-X-KEY lines: none, AES-128, SAMPLE-AES or DRM. A master rarely carries keys itself, so the sniffer reports the encryption of the variants captured in the same HAR, or tells you to check them.

Requests for the same URL are grouped (live playlists reload every few seconds), masters are listed first, and each variant points to its master. If the HAR also contains the AES-128 key request, you see its status and size: a 16-byte answer means the key was delivered.

Subtitles, keys, video files and segments

The rest of the log is sorted by type, with a counter for each, so a HAR of 3,000 requests comes down to a short list:

How to export a HAR file in Chrome, Edge, Firefox and Safari

The order matters in every browser: open the Network tab first, then reload the page and press play. A HAR only holds the requests made while the tab was recording, and the player asks for its manifest in the first seconds.

Chrome

  1. Open the page with the video, then open DevTools with F12 (or Ctrl+Shift+I, Cmd+Option+I on a Mac) and select the Network panel.
  2. Tick Preserve log if the player opens on another page. Recording is on while the round button at the top left is red (its tooltip reads Stop recording network log).
  3. Reload the page and press play. Let the video run a few seconds.
  4. Click the download icon in the action bar at the top of the Network panel, Export HAR (sanitized)..., and save the file.
  5. Drop the file on the sniffer above. Or skip the file: right-click any request, choose Copy > Copy all as HAR (sanitized), and paste it under "Paste HAR JSON instead".

The sanitized export leaves out the Cookie, Set-Cookie and Authorization headers. Chrome can include them: enable Settings > Preferences > Network > Allow to generate HAR with sensitive data, then pick Export HAR (with sensitive data) in the export drop-down. The sniffer does not need it, so keep the sanitized file, especially if you share it.

Microsoft Edge

  1. Open the page, press F12 (or Ctrl+Shift+I) and open the Network tool.
  2. Reload the page and press play.
  3. In the action bar at the top of the Network tool, click Export HAR (sanitized) and save the file. Right-click a request > Copy > Copy all as HAR (sanitized) puts the same JSON on the clipboard.

Edge uses the same setting as Chrome for the full export: Customize and control DevTools > Settings > Preferences > Network > Allow to generate HAR with sensitive data.

Firefox

  1. Open the page, press Ctrl+Shift+E (Cmd+Option+E on a Mac) to open the Network panel. If the player opens on another page, turn on Persist Logs in the gear menu at the right of the Network toolbar.
  2. Reload the page and press play.
  3. Open the gear menu at the right of the Network toolbar and choose Save All as HAR. Copy All as HAR puts the same JSON on the clipboard: paste it with "Paste HAR JSON instead".

The Firefox HAR keeps the request headers, cookies included, and stores binary responses in base64. That is fine here, since the file stays in your browser and the sniffer shows cookie names only, but do not send it to anyone.

Safari (Mac)

  1. Turn on the developer tools once: Safari > Settings > Advanced, then tick Show features for web developers. The Develop menu appears in the menu bar.
  2. Open the page, choose Develop > Show Web Inspector (Cmd+Option+I) and select the Network tab.
  3. Tick Preserve Log if the player opens on another page, so the requests are not cleared when the page changes.
  4. Reload the page and press play.
  5. Click Export in the Network tab (or press Cmd+S while it is focused) and save the .har file.

If Export is greyed out, reload the page once more with the Web Inspector open. When a HAR has no response text for some requests, the sniffer still lists their URLs and headers, without the playlist details.

Why a page URL is often not enough (CORS)

The "Page URL" tab asks your browser to download the page and search its HTML. Browsers only let one site read another site's page when that site answers with an Access-Control-Allow-Origin header. Most video sites do not send it, and the browser blocks the read before any text arrives. The sniffer then tells you which case it is: blocked by the site, unreachable, an HTTP error, or an http:// page that an https:// page is not allowed to load.

Even when the read works, the stream URL is often not in the HTML. Players fetch a configuration in JavaScript and build the manifest URL, with a signed token, at the moment you press play. That URL only exists in the network log. The "Page source" tab helps when the link is written in the page: paste the source from view-source: or the outerHTML copied from the Elements panel, which includes what scripts added to the page.

Sniffer page vs browser extension

Sniffer extensions watch the requests of your tab as they happen. This page reads the same information after the fact, from a log you export. Each has its place:

This sniffer pageVidora extension
What it readsThe HAR file you export, or source you pasteThe network requests of the tab where the video plays
InstallNoneChrome extension
OutputThe manifest URLs, their headers, and a command to test themA downloaded video file, with separate audio merged in
Your dataThe file is never uploadedRuns in your browser
LimitsOnly what DevTools recordedRefuses DRM, does not work on YouTube

Use the sniffer to understand a stream or to debug a player. If what you want is the video file, the extension skips the export step.

What to do with the m3u8 link

A DASH manifest (.mpd) goes to the DASH player and MPD analyzer instead: Open in DASH Player fills it in.

Streaming CDNs often sign their links so that they stop working after a few minutes or hours. When the expiry is written in the URL, the sniffer reads it and shows two things: the time left from now, and how long the link was valid after the HAR was recorded (from the request time in the HAR).

Parameter in the URLUsed by
Expires, expires, exp, eCloudFront canned policy, nginx secure links, many video hosts
Policy (with Signature and Key-Pair-Id)CloudFront custom policy: the date is inside the encoded policy
hdnts, hdnea, __token__, exp= in the pathAkamai tokens, Vimeo CDN
X-Amz-Date + X-Amz-ExpiresAmazon S3 presigned URLs
X-Goog-Date + X-Goog-ExpiresGoogle Cloud Storage signed URLs
se with sigAzure shared access signatures
token holding exp or a JWTPlayers that pass a JSON or JWT token

A link signed with an opaque token (a hash with no date) is flagged as signed, without a time. When a link has expired, play the video again with the Network tab open and export a new HAR: the player asks for a fresh link.

Limits worth knowing

Want the video, not the link?

Vidora is a Chrome extension that finds the stream on the page where the video plays and saves it in one click. It merges separate audio and video, handles AES-128, and refuses DRM.

Frequently asked questions

What is an M3U8 sniffer?
A tool that watches the requests a video player makes and picks out the HLS playlists (.m3u8) and DASH manifests (.mpd). This page does it from a HAR file, the network log that browser DevTools saves, so it sees the URLs the player really requested, including the ones built by JavaScript that never appear in the page source.
Is my HAR file uploaded?
No. The file is read by this page in your browser with the FileReader API and is never sent to Vidora or anywhere else. A HAR can contain cookies and tokens, so the sniffer shows cookie names only, never their values, and the Clear button wipes everything from the page.
Why does the sniffer find nothing in my HAR?
The recording most likely started after the player had loaded its playlist. Open the Network tab first, reload the page, press play, then export. If the video is inside an iframe from another site, its requests are still recorded in the same Network tab. A player whose video element shows a blob: URL usually still downloads its manifest over HTTP, so it shows up once the recording covers the start of playback.
Why does the page URL mode say the site does not allow it?
A web page can only read another site's page if that site sends an Access-Control-Allow-Origin header (CORS). Most video sites do not, so the browser blocks the read. Even when it works, many players build the manifest URL in JavaScript, so it is not in the HTML. A HAR file avoids both problems.
Does it find DRM-protected streams?
It lists them, labels the DRM declared in the playlist or manifest (Widevine, PlayReady, FairPlay), and marks the license requests it finds in the HAR. DRM content cannot be saved with ffmpeg, the Vidora extension refuses it, and removing DRM is illegal in most countries.
What is the difference between a master and a variant playlist?
The master playlist lists every quality and the separate audio and subtitle tracks. A variant (media) playlist lists the segments of one quality. Copy the master: tools pick the best quality from it and find the audio, while a variant copied alone can give a file without sound.
Does the sniffer show the AES-128 key?
No. It lists the key request with its HTTP status and size, because a 16-byte answer tells you the key was delivered, but it never reads or displays the key bytes. The key URL can be copied like any other link; the key itself stays in your HAR file.
How do I know if a stream link has expired?
Many CDNs sign their links with an expiry time written in the URL: Expires, exp or e, a CloudFront Policy, an Akamai hdnts token, X-Amz-Expires with X-Amz-Date, X-Goog-Expires, or the exp field of a JWT. The sniffer reads it and shows the time left from now, and how long the link was valid after it was recorded. A link marked expired answers 403: play the video again and export a new HAR.
Can I share a sniffer result?
For the Page URL tab, yes: Copy share link gives a link of the form getvidora.com/tools/m3u8-detector/#url= followed by the encoded page address, which opens this page and fetches the same page. Browsers do not send the part after # to a server. A HAR file is never shared or uploaded, so a HAR result has no share link.

Romain Gouraud, RGC Digital LLC

Updated 2026-10-09. Tested on HAR files built from live responses of the Apple fMP4 and oceans AES-128 public streams, on Chrome-style and Firefox-style HAR files with subtitles, keys, Range requests and signed CDN links, on a 200 MB HAR (engine only, in Node), on the built-in sample, and on the two pages offered in the Page URL tab.