Before MSE, the element played one URL — you set src and the browser fetched and decoded. To switch quality, you had to load a new URL and restart playback, which interrupted the user. MSE introduced a SourceBuffer object that JS can write video segments into; the video element plays from that buffer.
This is what makes "switch from 1080p to 720p mid-stream without buffering" possible. The player downloads each segment with JS, decides which quality to pick next based on bandwidth measurements, and feeds the chosen segment into the buffer. The browser doesn't know or care which quality each segment came from.
For YouTube downloaders that work browser-side (like VidPickr), MSE is irrelevant for the download itself — we fetch segments via plain XHR and assemble them with mp4-muxer. But the browser-side muxing pipeline borrows the same primitives MSE is built on (fragmented MP4, segment indexing).
Common questions
Is MSE required to play YouTube videos?
Related terms
Adaptive streaming (ABR)
Adaptive streaming (Adaptive Bitrate, ABR) is a protocol where the player switches between multiple quality variants of the same video during playback based on real-time network conditions.
DASH (MPEG-DASH)
DASH (Dynamic Adaptive Streaming over HTTP) is an open streaming protocol.
Fragmented MP4
Fragmented MP4 (fMP4) is an MP4 variant where the file is split into many short chunks ("fragments"), each containing its own header.
VidPickr is a free, browser-based YouTube downloader. Every term in this glossary either describes how YouTube delivers video or why your downloads behave the way they do. Try the downloader →