Testing

Media Source Extensions: Browser Support, Features, Issues

Media Source Extensions works in Chrome 23+, Edge 12+, Firefox 42+, Opera 15+, Safari 8+ on macOS, and iPhone via Managed Media Source in iOS 17.1+.

Author

Prince Dewani

May 4, 2026

Media Source Extensions (MSE) is a W3C JavaScript API that builds adaptive byte streams and feeds them to HTML media elements without plugins. It works in Chrome 23+, Edge 12+, Firefox 42+, Opera 15+, Samsung Internet 9.2+, Safari 8+ on macOS and iPadOS, while iPhone Safari stayed limited until iOS 17.1 added Managed Media Source.

This guide covers what Media Source Extensions is, which browsers support it, the key features, use cases, how to check support, and the known issues.

What is Media Source Extensions?

Media Source Extensions, or MSE, is a W3C specification that extends HTMLMediaElement with a MediaSource interface. It lets JavaScript build a video or audio stream piece by piece in the browser, append timed segments to a SourceBuffer, and play the stream back inside <video> and <audio> elements without a plugin.

Which browsers does Media Source Extensions support?

Media Source Extensions works in every modern desktop browser and on Android, with full coverage on iPad, while iPhone Safari only got production-grade support after iOS 17.1 added Managed Media Source.

Loading browser compatibility data...

Media Source Extensions compatibility in Chrome

Chrome supports Media Source Extensions by default from Chrome 23 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 17 to 22 had MSE disabled by default behind a flag, and Chrome 4 to 16 did not support MSE at all. Chrome 108 also exposes MSE inside dedicated workers, which lets streaming code run off the main thread.

Media Source Extensions compatibility in Edge

Microsoft Edge supports Media Source Extensions on every version, starting with Edge 12. Both legacy EdgeHTML Edge and modern Chromium Edge (from Edge 79) ship MSE on by default, so the same JavaScript runs across the full Edge release line on Windows, macOS, and Linux.

Media Source Extensions compatibility in Firefox

Firefox supports Media Source Extensions by default from Firefox 42 on Windows, macOS, Linux, and Android. Firefox 25 to 41 had MSE behind the media.mediasource.enabled preference, and Firefox 2 to 24 did not support MSE. Firefox enables MSE for MP4 with H.264 plus AAC and for WebM with VP8, VP9, or AV1.

Media Source Extensions compatibility in Safari

Safari supports Media Source Extensions from Safari 8 on macOS. iPad Safari picked up the same MSE build from Safari 13 on iPadOS, while iPhone Safari only had partial MSE support and gated full streaming behind Managed Media Source, which Apple added in Safari on iOS 17.1. Safari 3.1 to 7.1 on macOS and Safari on iOS 3.2 to 12 did not support MSE.

Media Source Extensions compatibility in Opera

Opera supports Media Source Extensions by default from Opera 15 on Windows, macOS, Linux, and Android. Opera 9 to 12.1 did not support MSE. Modern Chromium Opera follows the same SourceBuffer codec rules as Chrome, including MSE in dedicated workers from Opera 94.

Media Source Extensions compatibility in Samsung Internet

Samsung Internet supports Media Source Extensions from version 9.2 on Galaxy phones and tablets. Samsung Internet 4 to 8.2 did not support MSE. Because the browser is built on Chromium, it inherits the same SourceBuffer codec mix as Chrome for Android, including WebM with VP9 and MP4 with H.264 plus AAC.

Media Source Extensions compatibility in Android Browser

Android Browser supports Media Source Extensions from Android Browser 4.4.3 on Android 4.4 (KitKat) and later. Android 2.1 to 4.4.2 did not support MSE. On modern Android phones, use Chrome for Android, Firefox for Android, or Samsung Internet for the most current MSE build and the widest codec coverage.

Media Source Extensions compatibility in Internet Explorer

Internet Explorer 11 has partial Media Source Extensions support on Windows 8.1 and Windows 10. Internet Explorer 5.5 to 10 did not support MSE. Microsoft has retired Internet Explorer, so use Microsoft Edge for any new MSE work on Windows.

Note

Note: Media Source Extensions breaks across older Safari, iPhone, and legacy Android Browser builds. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!

What are the key features of Media Source Extensions?

Media Source Extensions gives a streaming player a small set of building blocks that together replace the old single-file <video src> loop with a flexible byte-level pipeline.

  • MediaSource and SourceBuffer: The MediaSource interface attaches to a <video> or <audio> element through a blob URL, and one or more SourceBuffer objects accept timed media segments through appendBuffer().
  • isTypeSupported() codec gate: A static check on MediaSource confirms whether a MIME type and codec string will play before the page fetches a single segment, so you can pick MP4 with H.264, WebM with VP9, or MP4 with HEVC at runtime.
  • Adaptive bitrate switching: Because the page controls which segments enter the SourceBuffer, a player can swap to a higher or lower quality variant on the fly without tearing down the <video> element.
  • Live streaming control: setLiveSeekableRange() and clearLiveSeekableRange() let a live player expose a sliding seek window for DVR-style rewind without re-creating the stream.
  • endOfStream and readyState: A player calls endOfStream() to mark the stream complete and reads readyState (closed, open, ended) to drive its state machine.
  • MSE in dedicated workers: Chrome 108 and later expose MediaSourceHandle in workers, which moves segment parsing and buffer math off the main thread and keeps the page responsive during 4K playback.
  • Encrypted Media Extensions hookup: MSE works alongside EME without requiring it. A SourceBuffer can hold encrypted segments and EME unlocks them through a CDM, which is how Netflix, Disney+, and Hulu ship DRM video.

What are the use cases of Media Source Extensions?

Media Source Extensions powers most plugin-free streaming on the web today. The W3C spec calls out four core scenarios, and almost every large video service runs at least one of them.

  • Adaptive bitrate streaming: DASH and HLS players (Shaka Player, dash.js, hls.js, Video.js) parse a manifest, fetch fMP4 or WebM segments, and feed them to a SourceBuffer so quality can scale with bandwidth.
  • Ad insertion and SCTE-35 splicing: Ad servers stitch ad pods into a live or VOD stream by appending ad segments to the same SourceBuffer, which keeps playback continuous and works with most modern ad-tech stacks.
  • Time-shifted DVR and catch-up TV: Live players use setLiveSeekableRange() to expose a rolling DVR window, so viewers can pause, rewind, or rejoin live without a separate VOD pipeline.
  • Performance and download control: A player decides exactly how many seconds of video to keep in the buffer, evicts old segments through SourceBuffer.remove(), and trims memory use on long sessions.
  • Production deployments: YouTube uses MSE in its HTML5 player, and Netflix, Disney+, Hulu, Twitch, Vimeo, and Amazon Prime Video stream through MSE on every desktop browser and Android phone they ship to.
...

How do you check if a browser supports Media Source Extensions?

A short JavaScript probe answers the question in two lines: confirm the MediaSource interface exists, then ask isTypeSupported() about the exact MIME type and codec string you plan to ship. Run the steps below in any browser DevTools console to get a yes or no for each codec combination.

  • Open DevTools console: Open any page in the target browser, press F12 (or Cmd+Option+I on macOS), and switch to the Console tab.
  • Check for the MediaSource interface: Type "MediaSource" in window and press Enter. A true response means the browser exposes MSE; false means the page must fall back to a progressive MP4.
  • Probe a codec string: Run MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E, mp4a.40.2"'). True means MP4 with H.264 plus AAC will play through a SourceBuffer.
  • Try WebM and HEVC variants: Repeat isTypeSupported() with 'video/webm; codecs="vp9, opus"' and 'video/mp4; codecs="hvc1.1.6.L93.B0"' to map out which higher-efficiency codecs the browser accepts.
  • Check for MSE in workers: Run "MediaSourceHandle" in self to confirm if the browser supports MSE inside dedicated workers, which Chrome 108 and Opera 94 ship on desktop and Android.

Paste the snippet below into the same console for a one-shot read of every common codec combination:

// Run in the DevTools console of any browser to test Media Source Extensions support.
console.log("MSE interface present:", "MediaSource" in window);

if (window.MediaSource) {
  const h264Mp4 = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
  const vp9Webm = 'video/webm; codecs="vp9, opus"';
  const hevcMp4 = 'video/mp4; codecs="hvc1.1.6.L93.B0"';

  console.log("MP4 + H.264 + AAC:", MediaSource.isTypeSupported(h264Mp4));
  console.log("WebM + VP9 + Opus:", MediaSource.isTypeSupported(vp9Webm));
  console.log("MP4 + HEVC:", MediaSource.isTypeSupported(hevcMp4));

  // MSE in dedicated workers landed in Chrome 108. Firefox and Safari are not there yet.
  console.log("MSE in Workers:", "MediaSourceHandle" in self);
} else {
  console.log("This browser does not expose MediaSource. Fall back to a progressive MP4 file.");
}

If the MediaSource line prints false, the browser cannot use MSE and your player should hand the <video> element a plain MP4 URL instead.

...

What are the known issues with Media Source Extensions?

MSE has the broadest streaming support of any web video API, but a handful of real edge cases still bite production teams. The hits cluster around iPhone Safari, codec gaps inside SourceBuffer, and memory pressure on long sessions.

  • iPhone Safari held back full MSE: Apple gated full Media Source Extensions on iPhone behind Managed Media Source, which only landed in iOS 17.1. Pages targeting older iPhones must fall back to native HLS through <video src=".m3u8"> or to a progressive MP4 file.
  • Codec mix inside SourceBuffer is uneven: MSE itself does not bind to a codec, so support for HEVC in MP4, AV1 in WebM, and Dolby Vision varies sharply across Chrome, Firefox, and Safari. Always gate the choice with isTypeSupported().
  • MSE in workers is Chromium-only: Chrome 108 and Opera 94 ship MSE inside dedicated workers, but Firefox and Safari have not. A player that depends on worker-side parsing must keep a main-thread fallback.
  • Memory pressure on long playback: SourceBuffer holds every appended segment until the page evicts it. A 4K live stream that runs for hours without remove() calls can push Chrome and Safari into garbage-collection stalls.
  • Encrypted streams need EME: MSE on its own only handles clear video. Netflix, Disney+, and HBO Max all bolt Encrypted Media Extensions on top so a CDM can unlock the bytes inside the SourceBuffer.
  • Internet Explorer 11 is partial only: IE 11 supports a subset of MSE on Windows 8.1 and 10. Sites that target IE need a server-side HLS fallback or a non-streaming MP4.
  • Native HLS bypasses MSE: When Safari plays an .m3u8 URL natively, it does not use MediaSource. A logging or A/B test that relies on SourceBuffer events stays silent in that path; switch to hls.js if you need full MSE coverage.

In my experience, the trickiest production failure is a SourceBuffer that runs out of memory on a Smart TV or low-end Android phone. The page keeps appending segments, the buffer grows past the device limit, and the <video> element silently stalls without firing an error event. Adding a SourceBuffer.remove() call on every appendBuffer cycle, plus a watchdog on currentTime, is the cheapest fix that holds up across browsers.

Citations

All Media Source Extensions version numbers and platform notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests