Media Recording

How to record video and audio that FlowPick cannot download directly, using MSE (Buffer Mode) or MSR (Screen Recording).

Some players never hand over a file. The video arrives as media buffers inside the page, the stream is encrypted, or the site simply hides every request worth grabbing. FlowPick's recorder covers that gap: it captures the video while you watch it and saves an ordinary MP4 or WebM file.

There are two modes, and they solve different problems. MSE (Buffer Mode) copies the media data the player feeds to the browser, so nothing is re-encoded. MSR (Screen Recording) records rendered pixels and audio, which works on almost anything you can see, at the cost of a re-encode.

Screenshot placeholder: media-recorder-mode-dialog.png — the FlowPick popup toolbar with the camera (Recording Mode) button highlighted, and the Recording Mode dialog open with the MSR and MSE options visible.


Choosing a Mode

MSE (Buffer Mode)MSR (Screen Recording)
What it capturesMedia buffers the player appends to the pageRendered pixels plus shared audio
QualityIdentical to the source stream, no re-encodeRe-encoded from what you see, up to 4K
File sizeClose to the source bitrateLarger, encoded on the fly (1–10 Mbps)
Source tabReloaded once, then played automaticallyLeft alone, only its playback state is tracked
AudioTaken from the media buffersTab audio, or whatever you share in the picker
Output.mp4, or .webm for WebM sources.webm
Best forDownload-blocked players without DRMSources MSE cannot capture, or a whole page

Start with MSE. It is faster, it keeps the original quality, and it produces a file that plays everywhere. Switch to MSR when the recorder reports no captured data, when the merged file refuses to play, or when you need something MSE cannot reach — a player that writes frames directly to a canvas, for instance.

Recording is an experimental feature. Not every video can be captured, and results vary with the player. See Troubleshooting if a recording comes out empty.

Before You Start

  • Chrome or Edge 102+ for full support. MSR's automatic tab capture uses the tabCapture API, which Firefox does not implement, so Firefox falls back to the browser's own source picker.
  • Start from the extension. The recorder tab needs a live channel to the extension; opening the recorder page directly gives you No recording channel was found.
  • The active tab is the source. FlowPick records the tab you are looking at when you open the popup, so switch to the video first.
  • Keep both tabs open. The source tab and the recorder tab must stay alive for the whole session. Closing either one ends the recording, and the recorder warns you before you navigate away.
  • One recording per tab. Starting a second recording for the same tab shuts down the previous session.
  • DRM content cannot be recorded. If the stream is protected with EME (Netflix, Disney+, and similar), what the player appends is encrypted, so the captured file will not play.
  • Mind your RAM. Captured data lives in the recorder tab's memory until you stop. A two-hour recording holds two hours of data; for long sessions, record in parts and download each one.

MSE (Buffer Mode)

Open the page and start the video once

Confirm the player works in your browser, then pause it.

Click the FlowPick icon

Then click the camera button in the popup toolbar.

Select MSE (Buffer Mode)

Tick Set as default mode if you want to keep this as your default, then click Start Recording.

Wait for the recorder to take over

FlowPick reloads the source tab and starts playback for you. The recorder shows Waiting for playback, then switches to Recording as soon as media data arrives.

Click Stop and prepare files

Preview the result, then click Download recording.

Screenshot placeholder: media-recorder-mse-live.png — the recorder page in MSE mode while capturing: source title, "Recording" badge with elapsed time, the REC pill, and the Duration / Captured / Tracks counters.

What Happens Behind the Scenes

MSE players (hls.js, dash.js, Shaka Player, and most custom players) push segments into a SourceBuffer. FlowPick hooks that path before the player is created, so every segment a page appends is copied out to the recorder as it plays:

  • The hook must be in place before the player creates its MediaSource, which is why the source tab is reloaded when the session starts
  • Each track (video/mp4, audio/mp4, video/webm, …) is captured separately and listed under Captured tracks on the recorder page
  • The container initialization segment (the ftyp/moov header for MP4, the EBML header for WebM) is kept and attached to the beginning of each track, so the merged file is playable even if you started recording in the middle of a video

Recording Follows Playback

The recorder is not a screen recorder: it only sees data while the player is actually streaming. Pause the video and the recorder goes back to Waiting for playback; press play and it resumes. A paused video therefore costs you no recording time and no memory.

Two practical consequences:

  • Speed things up with playback speed. Watching at 2× collects the same data in half the wall-clock time.
  • Skipping ahead is fine. Dragging the progress bar past the buffered range makes the player request segments faster, and those segments are captured too — as long as the player does not switch resolution while doing it.

Pick One Resolution and Keep It

Switching quality mid-playback (or letting an adaptive player do it for you) makes the player rebuild its tracks. FlowPick treats each rebuild as a separate capture, and the merged file is built from the largest coherent capture — so the parts recorded before and after the switch do not end up in one timeline. Set the quality to a fixed resolution before you start.

Why the Source Tab Reloads

The capture hook has to run in the page before the player does, and only a fresh page load guarantees that. FlowPick reloads the source tab, re-enables capture, and triggers playback so you do not have to switch tabs yourself. Refresh the source tab during a recording and you lose everything captured so far.


MSR (Screen Recording)

Open the page and start the video

Start playback so the player initializes, then pause it.

Click the FlowPick icon

Then click the camera button and select MSR (Screen Recording).

Click Start Recording

On Chrome and Edge, FlowPick captures the tab for you — no picker. If the API is unavailable (Firefox, or a lost permission), the recorder shows Choose what to record instead and asks you to pick a tab, window, or screen.

Click Stop and prepare files

Then download the .webm file.

Screenshot placeholder: media-recorder-msr-picker.png — the browser's source picker with Share tab audio enabled, next to the recorder page showing the "Choose source and record" button.

Automatic Tab Capture

On Chromium browsers, MSR records the source tab without any dialog. The stream ID comes from the extension, so you get the tab's own audio along with its video, and the recorder plays that audio back locally so you can still hear the video while recording.

The Fallback Source Picker

When automatic tab capture is not available, the recorder hands control to the browser's picker:

  • Choose this tab if the video plays in the source tab and you want its audio
  • Choose window or entire screen if you need to capture more than one tab
  • Tick Share tab audio (or Share system audio) if you want sound. Without it, the recording is silent — and this cannot be fixed after the fact

Auto-Crop

MSR records the video area, not the whole tab. The extension outlines the playing video on the source page with a FlowPick MSR recording area marker, and the recorder crops to that rectangle — so sidebars, comment feeds, and black bars stay out of your file. If the page has no playable video element, the full capture area is used instead.

Screenshot placeholder: media-recorder-msr-region.png — a video page with the "FlowPick MSR recording area" outline drawn over the player, captioned to show what the crop keeps.

Output Size

MSR re-encodes pixels, so the file is sized by resolution rather than by the source bitrate. Recording samples the capture at 30 fps (a 60 fps tab capture would roughly double the file size for very little visible gain) and picks a bitrate tier:

Capture areaVideo bitrate
Up to 640 × 3601 Mbps
Up to 1280 × 7202 Mbps
Up to 1920 × 10803.5 Mbps
Up to 2560 × 14406 Mbps
Larger10 Mbps

Audio is encoded at 128 Kbps. A 10-minute 1080p recording lands around 270 MB.


While You Record

  • Pause when the video pauses. Both modes follow the source tab's playback state, so pausing the video also pauses the recording and freezes the elapsed timer.
  • Do not close either tab. Keep the recorder open until the file is ready; closing it mid-session throws the capture away.
  • Watch the counters. Captured shows how much data has arrived and Tracks how many media tracks are being captured. If Captured stays at 0 B while the video plays, MSE is not seeing anything — stop and try MSR.
  • Avoid full-range seeking with quality switches. Fast, aggressive seeking across resolution boundaries is the most common way to end up with a file that only contains part of the video.
  • Record what you need. There is no trim step in the recorder, but the output file can be trimmed with Video Trimmer afterwards.

The Result File

File Names

The recorder names the file after the source tab's page title, with characters that are invalid in file names replaced and the title capped at 100 characters. Extensions follow the mode: .mp4 for MSE on MP4 sources, .webm for MSE on WebM sources and for every MSR recording.

How Tracks Are Merged

When you stop an MSE recording, the recorder picks the most complete group of tracks it captured and muxes video and audio into a single file:

  • Groups that contain a proper MP4 initialization segment are preferred over groups that do not
  • An audio track that never received its initialization segment is dropped, and the merge is logged to the console — a video-only file is better than a broken one
  • The merge writes playable metadata into the output, which is why even a partial capture plays in a normal player

Preview and Save

The finished file is previewed inside the recorder page, and it stays in the tab's memory until you download it. Click Download recording before you close the tab — a closed tab or a browser restart discards the result.

Screenshot placeholder: media-recorder-complete.png — the recorder page in its complete state: green success badge, file card with name, embedded preview player, and the Download recording button.


Troubleshooting

What you seeWhat it meansWhat to do
No recording channel was foundThe recorder page could not reach the extension within 10 secondsStart the recording again from the extension popup instead of opening the page directly
The recording session has expiredThe session ID no longer matches an active recordingStart a new recording from the popup
The source tab was closed before any media data was capturedThe source tab is goneReopen the page and record again
No recording data was producedNothing was captured — usually a player that does not use MediaSource, or a very short sessionTry MSR (Screen Recording) instead
The captured tracks could not be combined into a playable fileThe capture is missing initialization data or mixes incompatible segmentsRe-record with a fixed quality, avoiding seeks during the first seconds
Screen sharing was cancelled or not allowedThe picker was dismissed, or capture was deniedRetry and allow the source; grant tab-capture permission if asked
This browser does not support screen recordingThe browser lacks MediaRecorder or capture APIsUse a current Chrome, Edge, or Firefox
The recording could not be stopped cleanlyThe stop command failed between the page and the extensionDownload whatever the recorder previewed, then start a fresh session
Captured stays at 0 BMSE saw no appends — often DRM, encrypted buffers, or a canvas-based playerSwitch to MSR
If a recording fails repeatedly on one page, reload the source tab and try again before switching modes. Players sometimes keep a half-initialized MediaSource after an error, and a clean load fixes it.

Frequently Asked Questions

Can I record a live stream?

Not reliably. MSE capture records whatever the player buffers while you record, but a live stream has no end-of-stream marker, so the merged file often will not play back correctly. MSR can record a live view, but the result ends when you stop.

Why is my recording silent?

Either the source has no separate audio track that MSE could capture, or — in MSR — audio sharing was not enabled in the picker. In the second case, nothing can be recovered from the finished file and you have to record again.

Why does my file only contain part of the video?

The player switched resolution, rebuilt its MediaSource, or the page inserted an ad. Each rebuild starts a new capture, and only one coherent group is merged. Pin the quality to a single resolution and avoid seeking across resolution changes.

Does recording slow down the browser?

MSE capture only copies buffers the page already produced, so the overhead is mostly memory. MSR re-encodes video in real time, which does cost CPU — the higher the capture resolution, the more it costs. If MSR makes playback stutter, capture a smaller area or use MSE instead.

Is anything uploaded?

No. Both modes run entirely in your browser: MSE data moves between the page, the extension, and the recorder tab on your machine, and MSR is encoded locally. Nothing is sent to a server, and FlowPick has no copy of your recording.

Can I record a paid streaming service?

No. Streaming services encrypt their media with DRM, so what gets captured is encrypted data that no player can open. FlowPick does not attempt to bypass DRM.


Privacy

Recording stays on your device from start to finish. Captured buffers travel only between the source tab, the extension's background process, and the recorder tab; the screen stream in MSR never leaves the page either. FlowPick stores nothing on a server and keeps no copy of your files.

See Privacy & Security for how FlowPick handles capture data and what it stores locally.