Testing

MediaRecorder: Browser Support, Codecs, Limitations

MediaRecorder works in Chrome 49+, Edge 79+, Firefox 29+, Opera 36+, Safari 14.1+ macOS, and Safari 14.5+ iOS. Learn MediaRecorder browser support and quirks.

Author

Prince Dewani

May 6, 2026

MediaRecorder is a W3C JavaScript API that records audio and video from a MediaStream into a Blob. It supports Chrome 49+, Edge 79+, Firefox 29+, Opera 36+, Samsung Internet 5+, Safari 14.1+ on macOS, and Safari 14.5+ on iOS; Internet Explorer and the legacy Android Browser do not support it.

This guide covers what MediaRecorder is, the browsers that support it, the codecs it accepts, how to check support, how to enable it in Safari, and the known issues.

What is MediaRecorder?

MediaRecorder is a W3C JavaScript interface in the MediaStream Recording API that records a MediaStream into a Blob of encoded audio or video. The MediaStream usually comes from getUserMedia, getDisplayMedia, or a Web Audio graph. It exposes start, stop, pause, resume, and dataavailable events to the page.

Which browsers does MediaRecorder support?

MediaRecorder works in every modern desktop and mobile browser. Chrome, Firefox, Edge, Opera, and Samsung Internet support it on Windows, macOS, Linux, ChromeOS, and Android, while Safari supports it from Safari 14.1 on macOS and Safari 14.5 on iOS.

Loading browser compatibility data...

MediaRecorder compatibility in Chrome

Chrome supports MediaRecorder by default from Chrome 49 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 47 to 48 had MediaRecorder disabled by default behind the experimental web platform features flag and only recorded video. Chrome 4 to 46 did not support the API.

MediaRecorder compatibility in Edge

Edge supports MediaRecorder by default from Edge 79 on Windows, macOS, Linux, and Android. Edge 79 was the first Chromium-based release, so it inherits the same recorder behavior as Chrome. The legacy EdgeHTML versions Edge 12 to 78 never added MediaRecorder.

MediaRecorder compatibility in Firefox

Firefox supports MediaRecorder by default from Firefox 29 on Windows, macOS, Linux, and Android. Audio and video recording both work from version 29, and later releases added codec choices and bitrate hints. Firefox 2 to 28 did not support the API.

MediaRecorder compatibility in Safari

Safari supports MediaRecorder by default from Safari 14.1 on macOS Big Sur and from Safari 14.5 on iPhone and iPad. Safari 12.1 to 14 on macOS and Safari 12 to 14.4 on iOS shipped MediaRecorder behind an Experimental Features toggle. Safari 11 and earlier on macOS, and Safari 11.4 and earlier on iOS, did not support it.

MediaRecorder compatibility in Opera

Opera supports MediaRecorder by default from Opera 36 on Windows, macOS, and Linux, and from Opera Mobile 80 on Android. Opera 34 to 35 had MediaRecorder disabled by default, and Opera 9 to 33 did not support it. Modern Chromium-based Opera shares Chrome's behavior.

MediaRecorder compatibility in Samsung Internet

Samsung Internet supports MediaRecorder by default from version 5 on Galaxy phones and tablets. It is built on Chromium, so it inherits the same audio and video MIME types Chrome supports. Samsung Internet 4 did not support the API.

MediaRecorder compatibility in Android Browser

The legacy stock Android Browser does not support MediaRecorder in any version. On modern Android phones, use Chrome for Android 49+, Firefox for Android 29+, or Samsung Internet 5+ for MediaRecorder support. The stock browser only ships on Android 4.4 KitKat and earlier devices.

MediaRecorder compatibility in Internet Explorer

Internet Explorer does not support MediaRecorder in any version. Microsoft never added the MediaStream Recording API to IE 5.5 through IE 11. Microsoft has retired Internet Explorer in favor of Edge, so any new build should target Edge or another Chromium-based browser.

Note

Note: MediaRecorder breaks across older Safari, iOS, and the stock Android Browser. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!

What codecs and MIME types does MediaRecorder support?

MediaRecorder supports a different list of MIME types in each browser, so call MediaRecorder.isTypeSupported() before recording. Chromium browsers default to audio/webm with Opus and video/webm with VP8 or VP9, while Safari only writes audio/mp4 and video/mp4 with AAC and H.264.

  • WebM with VP8 or VP9: Chrome 49+, Edge 79+, Firefox 29+, Opera 36+, and Samsung Internet 5+ all write audio/webm and video/webm. Safari does not write WebM.
  • WebM with H.264: Chrome 52+ accepts video/webm;codecs=h264 on platforms that ship a hardware H.264 encoder. Firefox returns false from isTypeSupported() for that MIME.
  • MP4 with H.264 and AAC: Safari 14.1+ on macOS and Safari 14.5+ on iOS write video/mp4 and audio/mp4. Chrome writes mp4 only when the platform offers an OS encoder, so test with isTypeSupported() first.
  • Audio/webm with Opus: every WebM-supporting browser accepts audio/webm;codecs=opus.
  • Audio/ogg with Opus: Firefox 29+ writes audio/ogg;codecs=opus. Chromium browsers and Safari do not.
  • ALAC and PCM: Safari Technology Preview accepts audio/mp4;codecs=alac and audio/webm;codecs=pcm for lossless capture. Stable Safari and Firefox do not write them.

How do you check if a browser supports MediaRecorder?

Test MediaRecorder support in two steps. First, check that the MediaRecorder constructor exists in window. Second, call MediaRecorder.isTypeSupported() with the MIME type you plan to record. Both calls return synchronously, so they fit inside a feature-detect block before getUserMedia.

The isTypeSupported() call returns a boolean. A true result means the browser will accept the MIME type, but it does not promise the encoder can run at the requested bitrate on the current device. Always wrap MediaRecorder.start() in a try/catch and listen for the error event in case the encoder rejects the stream at runtime.

Paste this snippet into the browser DevTools console to confirm the constructor and the four most common MIME types:

// Run in the DevTools console of any browser to test MediaRecorder support.
const hasMediaRecorder = "MediaRecorder" in window;
console.log("MediaRecorder constructor:", hasMediaRecorder ? "yes" : "no");

if (hasMediaRecorder) {
  const mimeChecks = [
    "audio/webm;codecs=opus",
    "audio/mp4;codecs=mp4a.40.2",
    "video/webm;codecs=vp9,opus",
    "video/mp4;codecs=avc1.42E01E,mp4a.40.2"
  ];
  for (const mime of mimeChecks) {
    const ok = MediaRecorder.isTypeSupported(mime);
    console.log(mime, "->", ok ? "yes" : "no");
  }
}

If every MIME prints "no", the browser cannot record at all and your page should fall back to a server-side recorder or a WebRTC pipe to the backend.

...

How to enable MediaRecorder in Safari?

Safari supports MediaRecorder by default from Safari 14.1 on macOS and Safari 14.5 on iOS. On older Safari 12.1 to 14 on macOS and Safari 12 to 14.4 on iOS, the API ships but is disabled, so flip the experimental flag before any page can use it.

  • Show the Develop menu: Open Safari, Settings, Advanced, and tick "Show features for web developers" so the Develop menu appears in the menu bar.
  • Open Feature Flags: Click Develop, Feature Flags (or Develop, Experimental Features on Safari 14 and earlier) to load the flag panel.
  • Toggle MediaRecorder: Search for MediaRecorder in the flag list and switch it on.
  • Reload the page: Close and reopen Safari, then reload your page so the flag takes effect.
  • Confirm support: Open the JavaScript console and run typeof MediaRecorder; if the result is "function", the flag is live.

On iPhone or iPad, open Settings, Safari, Advanced, Experimental Features, toggle MediaRecorder on, and reload Safari. The flag is sticky, so you only have to do it once per device.

What are the known issues with MediaRecorder?

MediaRecorder has the broadest reach of any web recording API, but a few real edge cases still break in production. The biggest hits are codec interop, iPhone Safari quirks, and the legacy Android Browser gap.

  • Older Safari kept it behind a flag: Safari 12.1 to 14 on macOS and Safari 12 to 14.4 on iOS shipped MediaRecorder behind Experimental Features. Sites that target visitors on macOS Big Sur 11.2 or iOS 14.4 still need a server-side recorder fallback.
  • Codecs are not interoperable: Chrome and Firefox write audio/webm with Opus, while Safari writes audio/mp4 with AAC. A WebM file from Chrome will not play in Safari without re-muxing on the server.
  • IE and Android Browser never supported it: IE 5.5 through 11 and the stock Android Browser do not include MediaRecorder. Use Edge, Chrome, or Firefox on those platforms.
  • Firefox does not write video/webm with H.264: Chrome 52+ accepts video/webm;codecs=h264 on platforms with hardware H.264, but Firefox returns false from isTypeSupported() for that MIME.
  • timeslice quirk in Firefox: Firefox's start(timeslice) does not strictly chunk data on the timeslice boundary, so Blobs from short timeslices can be larger than the requested window.
  • Constraints reset audio in older Chrome: Calling track.applyConstraints() on a recording track silently resets the encoder in Chrome 90 and earlier. Pause MediaRecorder before applying new constraints, then resume.

In my experience, the most surprising failure happens on iPhone Safari. Even when isTypeSupported('audio/webm;codecs=opus') returns true, MediaRecorder.start() throws NotSupportedError on iOS, and the page silently records nothing. Always test the actual start() call, not just isTypeSupported().

...

Citations

All MediaRecorder 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