video.js, JW Player, Plyr, Brightcove, Kaltura and Flowplayer: How to Save Their Video

Every player library on this page ultimately asks an HTTP server for bytes. The brand on the control bar is presentation; the network tab is the truth.

Short answer: to download video from a web player — video.js, JW Player, Plyr, Brightcove, Kaltura, Flowplayer, or a bespoke script — identify what the player requests, not what it displays. HTML5 <video> with a direct src gives you one file; anything built on MediaSource gives you a manifest plus fragments, and the manifest may describe HLS or DASH. The libraries differ in skin, licensing and features, not in the physics of delivery.

What each of these actually is

PlayerWhat it isTypical media it plays
video.jsOpen-source HTML5 player framework; a plugin ecosystem adds streamingDirect files with the core; HLS/DASH via plugins such as http-streaming
JW PlayerCommercial platform player; its own site describes streaming and monetisation featuresMP4 plus adaptive playlists; DRM-capable configurations exist
PlyrLightweight open-source player UI. Its project page stated on 2026-10-12 that Plyr is deprecated, receives security updates only, and recommends Video.js 10 for new projects — which is why you will still find it on older sitesWhatever element it wraps: MP4, WebM, or HLS via hls.js
BrightcoveEnterprise video platform; players pull from its delivery APIs (documented publicly)HLS/DASH manifests from its CDN; protected delivery is a supported option
KalturaEnterprise/education video platform (site)Adaptive streams through its player; access rules vary by deployment
FlowplayerLong-running HTML5 player (site), now under WowzaProgressive files and HLS
Custom JavaScript playerHand-written, often MediaSource-backedWhatever the developer wired in — including fMP4 segment families

None of these brands changes the answer to “what should I fetch”. They change the shape of the request — a plugin may fetch a playlist, then a init segment, then numbered fragments; a custom script may post for a token first.

The detection method that covers all of them

1

Play, with the Network panel already open

Filter to media. Players request late: on click, on seek, on viewport entry. Nothing seen while paused means nothing seen at all.

2

Classify what appears

  • .mp4 / .webm once, large → progressive file. Save it.
  • .m3u8 then .ts or .m4s → HLS. Merge to MP4.
  • .mpd plus .m4s families, one audio-only → DASH. Fetch both tracks.
  • Only blob: in the element and no file address anywhere → MSE-fed; the fragments behind it are the source (blob page).
  • Key-request traffic and encrypted samples → protected. Stop; see the DRM identification page.
3

Auto-detect rather than memorise

“Detect HLS and DASH streams automatically” is what a desktop downloader does when it lists media for a page: it watches the requests and labels the shapes, so you pick a rendition rather than reverse-engineering the player. Manual DevTools work remains the right way to understand a page; it is the wrong way to fetch a 900-segment file.

4

Mux without re-encoding

Whatever came in fragmented or separated goes out as one MP4 or MKV by copying streams; FFmpeg documents the containers in its formats reference and the joining step in its concatenation guide.

MSE, in the way that matters for saving

Media Source Extensions let script append buffers to a media element instead of pointing it at a URL. Two consequences: the element’s address is a blob handle with no remote meaning, and the browser may be downloading segments in an order decided by playback, not by the file’s natural sequence. The spec is Media Source Extensions at W3C; the practical reading is that MSE changes how you find the media, never whether it exists. Download video from a MediaSource URL therefore always means “find the segment requests behind the buffer”.

Player-specific friction that is real

  • Enterprise platforms (Brightcove, Kaltura). Access is often institutional: the player may need a token exchanged from an API before media is fetched, and some deployments use protected delivery. Work inside your own authorised session; nothing here extends entitlements.
  • Monetised players (JW Player, some Flowplayer setups). Ads are stitched into the stream by manifest manipulation, so a naive merge can produce ad breaks in your file. Longer content also tends to be adaptive rather than one file.
  • Plyr and video.js on older sites. Frequently progressive MP4 — the easiest case. Plyr’s deprecation means you will meet it on legacy pages rather than new builds.
  • Custom scripts. Assume token refresh and expiring URLs: expect 403 mid-download on long files.

Scope, plainly

This page is about recognizing and fetching media you are entitled to watch. Where a platform delivers encrypted streams — a common option on the enterprise players above — that is a boundary, not a puzzle: no method here or elsewhere in this blog recovers or decrypts protected content. And the terms of the site hosting the player govern what you may do with a saved copy.

FAQ

How do I download a video from a video.js player?

Play it and read the requests: a direct MP4 if the plugin stack is simple, HLS or DASH fragments if streaming plugins are in use. Then save or merge accordingly.

Is Plyr still maintained?

Its project page stated on 2026-10-12 that Plyr is deprecated and receiving security updates only, recommending Video.js 10 for new projects. Expect to meet it on older sites.

Can I save video from Brightcove or Kaltura?

Where your account may play it and the stream is not encrypted, yes, via the same session-aware capture. Enterprise deployments frequently do use protected delivery, which is out of scope.

What if the player is custom JavaScript?

It still fetches over HTTP. Watch the Network panel, classify the shape, and treat addresses as short-lived if tokens are involved.

How can I detect HLS and DASH automatically?

Use a downloader that lists the media a page requested and labels the format, instead of reading the markup or guessing extensions.

Does the player library change the file I get?

No. The codec, ladder and container delivered by the server decide; the player only presents them.