Troubleshooting · Chrome Extension · HLS
Chrome Extension Video Downloader Not Working: 5 Causes and Fixes
Your extension worked yesterday and now it does not. Before you uninstall everything in frustration, run through this diagnostic ladder - the fix is almost always one of five things, and three of them take under two minutes.
Video downloader extensions break silently. One day they capture every HLS stream you throw at them; the next they show a spinner forever, download a 0-byte file, or simply ignore the stream entirely. No error message, no changelog entry. Just a broken button where a working button used to be.
This guide covers the five most common failure modes in order of frequency. Each section has a concrete diagnosis step and a specific fix. The first two causes are trivially fixable in under five minutes. Causes three through five are more technical but the fix steps are just as concrete. And if all five fail, the last section names a one-line answer: switch to an extension built for the current Chrome architecture that handles these edge cases natively.
Quick diagnostic: which kind of failure are you seeing?
The failure mode narrows the likely cause immediately. Match your situation below before reading further.
Failure mode decision tree
Extension detects the stream but download never completes (spinner forever or 0-byte file)
Most likely: Cause 3 (AES-128) or Cause 4 (Referer/403). Segments are being rejected mid-download.
Extension does not detect the stream at all - icon stays gray or shows no streams
Most likely: Cause 1 (CDN signature change) or Cause 2 (permissions revoked).
Download starts then stops partway through, inconsistently
Most likely: Cause 5 (MV3 service worker timeout). The background process is dying mid-job.
File downloads but video has no audio track
The extension is missing the audio rendition from the HLS master playlist. See the FAQ at the bottom of this page for the specific fix.
File downloads but the format is wrong (raw .ts instead of .mp4, or corrupted)
The extension lacks a muxing step. It is saving raw MPEG-TS segments without remuxing to MP4. Not a download failure but a post-processing gap - look for an extension that includes muxing, or pipe the segments through ffmpeg yourself.
With your failure mode identified, jump to the corresponding cause below. Or read straight through - each section is short.
Cause 1: Site changed its CDN signature handling
CDNs sign stream URLs with short-lived tokens so the playlist cannot be hotlinked. The exact format of that token changes whenever the CDN rotates its signing key or updates its signing algorithm. Extensions that rely on pattern matching to detect HLS URLs will stop recognising the new URL shape and silently skip the stream.
How to confirm this is the cause
- Open DevTools (F12), go to the Network tab, filter by
m3u8. - Play the video. Confirm the M3U8 request appears in the Network tab - it is there, the browser can fetch it.
- Check whether your extension icon shows any badge or count. If the browser can see the stream but the extension cannot, the extension's URL pattern no longer matches the new CDN format.
Fix
- Go to
chrome://extensions. - Find your downloader and click the circular reload icon. This forces the extension to restart and re-evaluate its detection rules.
- Check the extension's Chrome Web Store listing for an update published in the past 7 days. If there is one and it is not installed, click "Update" on the
chrome://extensionspage (or toggle the developer mode update button). - If the extension has a built-in cache or settings panel, clear it.
- Reload the source page and try again.
If the extension has not been updated but the CDN clearly changed (the URL structure looks different from before), you will need to wait for a patch or switch extensions. The extension author cannot detect new URL signatures automatically - they have to ship an update.
Cause 2: Extension lost host permissions after Chrome update
Starting with Chrome 110, Chrome periodically audits extension host permissions and can silently revoke access to sites the extension has not been used on recently. It can also happen after a Chrome major version update that changes how optional permissions are handled. The extension is still installed and appears to work - it just has no permission to observe network requests on the specific domain you are trying to download from.
How to confirm this is the cause
- Go to
chrome://extensions. - Find your downloader and click Details.
- Scroll to Site access. Check whether it says "On all sites", "On specific sites", or "On click". If it has been narrowed to "On click" or specific sites, Chrome revoked the broad permission.
Fix
- On the Details page for your extension, find Site access and switch it to On all sites.
- If the option is grayed out, the extension uses fixed permissions in its manifest rather than optional ones. In that case, the permission was not revoked - move on to Cause 3.
- Alternatively, navigate to the page where the video is hosted, click the extension icon in the toolbar, and look for a "Allow on this site" prompt that the extension itself may show.
- Reload the video page and test again.
This is also a good moment to check chrome://extensions/shortcuts to confirm the extension's keyboard shortcuts were not overridden by another extension installed around the same time.
Cause 3: HLS stream switched to AES-128 encryption
A growing number of video platforms are adding AES-128 encryption to streams that were previously delivered in the clear. The change is invisible in the browser - the video plays normally because the browser decrypts segments on the fly. But most generic video downloader extensions do not implement the decryption step. They download the encrypted segments, save them to disk, and you end up with a file that either will not play or produces garbled output.
How to confirm this is the cause
- Open DevTools (F12), Network tab, filter by
m3u8. - Play the video. Click the M3U8 playlist request, then open the Response tab.
- Look for a line that starts with
#EXT-X-KEY. It will look something like this:
#EXT-X-KEY:METHOD=AES-128,URI="https://cdn.example.com/key/abc123",IV=0x00000000000000000000000000000001
If that line is present, the stream is AES-128 encrypted. Your downloader is failing silently because it downloads encrypted bytes and cannot play them.
Fix
You need an extension that explicitly supports AES-128 HLS decryption - one that fetches the key from the URI attribute, decrypts each segment with the matching IV, then muxes the decrypted output into an MP4 file. Our AES-128 HLS downloader guide covers the technical requirements in detail, including what to check in the extension's documentation before installing it.
The companion article on downloading encrypted M3U8 streams also covers the ffmpeg command-line path if you prefer a manual workflow: ffmpeg -allowed_extensions ALL -i "playlist.m3u8" -c copy output.mp4 - ffmpeg fetches the key itself and decrypts transparently.
Vidora handles AES-128 decryption natively. If you are already searching for an alternative, it is one extension that covers this case without extra configuration. More on that in the final section.
Cause 4: Site requires authenticated Referer or cookies
When your extension requests video segments directly, those requests do not automatically carry the same Referer header or session cookies that the browser uses when fetching segments for in-page playback. CDNs validate these headers and return 401 Unauthorized or 403 Forbidden on any request that does not match expectations. The extension's download starts, hits the first segment, gets a 403, and either silently stops or produces a corrupt file.
How to confirm this is the cause
- Open DevTools (F12), Network tab.
- Start a download with your extension, then filter the Network tab by
.tsor.m4s(the segment file extensions). - Watch the response status codes on incoming segment requests. If you see a run of 200 OK followed by 401 or 403 responses, the CDN rejected the extension's requests for missing or incorrect headers.
- Click one of the 403 responses and check the Request Headers. Compare the
Referervalue (if present) with what a normal page-initiated request carries.
Fix
The proper fix requires the extension to inject the correct Referer and session Cookie headers onto its outgoing segment requests. This is done via Chrome's declarativeNetRequest API (in Manifest V3) or the older webRequest API (in Manifest V2). Not every extension implements this. Check the extension's documentation for any mention of "Referer rewrite", "header injection", or "authenticated streams".
You can verify whether the stream itself is accessible by using our DASH MPD Analyzer for DASH streams or the M3U8 Detector for HLS - these tools confirm whether segments resolve correctly from outside the page context. For the DevTools manual path, our guide to capturing M3U8 URLs covers how to copy the request as cURL, which bundles the correct headers.
Vidora rewrites Referer headers natively via declarativeNetRequest, so segment requests always carry the correct origin. If Referer rejection is your issue, that is the cleanest path to a working download.
Cause 5: Service worker killed by Chrome MV3 quotas
This is the most technically subtle cause and it is becoming more common as Chrome's Manifest V3 enforcement matures. Under MV3, a Chrome extension's background logic runs in a service worker rather than a persistent background page. Service workers are designed to be short-lived: Chrome kills them after 30 seconds of idle time to save memory.
For simple extensions this is fine. For a video downloader that needs to orchestrate a long sequence of segment requests over minutes, it is a serious problem. If the service worker is killed mid-download, the orchestration state is lost. The extension may queue a new segment request on the next event and appear to restart, or it may just silently fail. The behavior looks exactly like a network error to the user.
How to confirm this is the cause
- Go to
chrome://extensionsand enable Developer mode using the toggle in the top right. - Find your downloader and click Service worker next to it. This opens a DevTools panel for the extension's background context.
- Start a download and watch the Console tab. If you see messages like "Service worker registration failed", or the status in the extension list flips from Active to Inactive mid-download, the worker was terminated.
Why many popular extensions hit this problem
Extensions that were built as MV2 and hastily ported to MV3 often replaced a persistent background page with a service worker without restructuring the download flow to survive worker restarts. The result is an extension that works for short downloads but fails unpredictably on longer or larger files.
The correct architectural fix is to move download coordination out of the service worker entirely. One approach is to use an offscreen document - a hidden, long-lived HTML page that MV3 introduced specifically for tasks that require persistent context. Vidora uses an offscreen-document architecture for this reason: segment downloading and muxing run in a context that is not subject to the 30-second service worker kill. If this failure mode matches your experience, it is worth switching to an extension that was designed for MV3 from the ground up rather than patched to survive it. See the HLS downloader Chrome extension buyer's guide for what to look for.
If all 5 fixes failed: try a Manifest V3 native, AES-128 capable extension
You have cleared the cache, restored permissions, confirmed the stream is not AES-128 encrypted beyond your extension's capability, verified Referer headers are not the blocker, and watched the service worker stay alive during the download. And it still does not work.
At that point the honest answer is that your extension has a bug or a fundamental architectural incompatibility with the current version of Chrome. It happens. Extensions that were excellent in 2022 under MV2 may be partially broken today and the author may not be actively maintaining them.
What to look for in a replacement
- Manifest V3 native: built for MV3 from the start, not a port of an MV2 extension.
- AES-128 decryption: the extension fetches the key and decrypts segments before saving.
- Referer and cookie handling: uses
declarativeNetRequestto keep segment requests authenticated. - Offscreen or persistent context: does not rely on a service worker alone to coordinate long downloads.
- Active maintenance: check the Chrome Web Store update date. An extension last updated over 6 months ago may be abandoned.
Our best video downloader Chrome 2026 roundup benchmarks the main options against these criteria. The alternatives page also has a side-by-side comparison of feature coverage across the main tools.
For a specific comparison with one of the most popular older extensions, see the Vidora vs Video DownloadHelper page - Video DownloadHelper's own changelog documents the MV3 transition issues that affected many of its users through 2024 and 2025.
Frequently asked questions
How do I tell if my video downloader extension is Manifest V2 or Manifest V3?
Go to chrome://extensions, enable Developer mode (toggle in the top right), then click the Details button on your extension. The page shows the manifest version under "Permissions". You can also unpack the extension and open its manifest.json file - the second line is "manifest_version": 2 or 3.
What happens to Manifest V2 extensions now that Chrome is enforcing MV3?
Google started disabling MV2 extensions in Chrome 127 (mid-2024) for most users and is completing the rollout in 2026. Your MV2 downloader may still appear installed but show a warning banner and refuse to run, or it may simply stop detecting streams without any visible error. The fix is to switch to an MV3-native extension built for the new architecture.
Should I uninstall my old downloader extension before installing a new one?
Not necessarily. Two downloader extensions can coexist - each runs in its own isolated context. That said, some extensions register the same keyboard shortcuts or compete for the same toolbar icon area. If you notice conflicts, keep only the one that works. Uninstalling is clean and safe.
Can two video downloader extensions run at the same time?
Yes. Chrome runs each extension in a separate process. Both will listen for network requests independently. You may see both icons light up on the same page. The only practical conflict is keyboard shortcut overlap - check chrome://extensions/shortcuts and reassign if needed.
Does AES-128 in an HLS stream mean the video is DRM protected?
No. AES-128 in HLS is a lightweight encryption layer where the decryption key is delivered by the same server alongside the playlist - no license server, no hardware root of trust, no DRM handshake. It is fundamentally different from Widevine, PlayReady, or FairPlay. An extension that fetches the EXT-X-KEY URI and decrypts segments on the fly can handle AES-128 streams without any DRM bypass. True DRM (Widevine L1/L3) streams are a different category entirely and cannot be downloaded by any browser extension.
My extension detects the stream but the downloaded file has no audio - why?
HLS streams often carry audio and video in separate tracks (audio demuxing). A generic extension may download only the video track and skip the audio rendition listed under #EXT-X-MEDIA:TYPE=AUDIO in the master playlist. Check whether the extension has a setting to include audio renditions, or switch to one that handles muxing of both tracks natively.
The extension worked on this site last week - what changed on the site's side?
The three most common changes on the site side: the CDN rotated its signing algorithm (tokens now use a different hash), the platform added AES-128 encryption to streams that were previously clear, or the Referer policy was tightened to reject requests that do not originate from the platform domain. Any of these breaks a downloader that was working before, with no change on your end required to trigger the failure.
Conclusion
Most video downloader extension failures fall into a short list of root causes - CDN token rotation, revoked host permissions, AES-128 encryption, Referer header rejection, and MV3 service worker timeouts. Each one has a specific diagnostic step and a concrete fix. Work through the decision tree at the top of this article, match your failure mode to a cause, and apply the fix before reaching for a new extension.
If the diagnosis points to a structural limitation in your current extension - AES-128 support missing, Referer handling absent, or MV3 architecture lacking a persistent context - that is a signal to look at alternatives rather than keep patching. The 2026 roundup and the alternatives hub give you the tools to make that comparison on the features that actually matter.
About the author
RGC Digital LLC builds Vidora, a privacy-first video downloader Chrome extension for Vimeo, Bunny.net, Wistia, Loom, HLS, and DASH streams. Based in Albuquerque, NM. We write about video tooling, streaming protocols, and Chrome extension engineering.
Related reading
- AES-128 HLS downloader: what to look for in 2026
- How to download encrypted M3U8 video (AES-128 full guide)
- How to find the M3U8 URL of any video stream (DevTools)
- Best video downloader Chrome extension 2026 (benchmark)
- HLS downloader Chrome extension buyer's guide
- Vidora alternatives: side-by-side comparison
- Vidora vs Video DownloadHelper