MPEG-DASH plays only on Edge Legacy 12 to 18 natively. Chrome, Firefox, Safari, Opera, and IE 11 use dash.js with Media Source Extensions for DASH playback.

Prince Dewani
May 2, 2026
MPEG-DASH is an adaptive bitrate video streaming protocol that ISO/IEC standardized as 23009-1 under the Moving Picture Experts Group. Native support shipped only in Microsoft Edge Legacy 12 to 18; Chrome, Firefox, Safari, Opera, and Internet Explorer 11 play DASH only through dash.js or Shaka Player on top of Media Source Extensions.
This guide covers what MPEG-DASH is, the browsers that support it, key features, how it compares to HLS, how to play DASH, and known issues.
MPEG-DASH is short for Dynamic Adaptive Streaming over HTTP. The protocol breaks video into short fragments encoded at multiple bitrates, lists them in an XML manifest called the MPD, and lets the player switch quality levels mid-playback based on bandwidth. ISO/IEC publishes the spec as 23009-1.
No mainstream browser plays MPEG-DASH from a .mpd manifest natively today. Microsoft Edge Legacy 12 to 18 was the only desktop browser with a built-in DASH demuxer, and every other browser, including Chrome, Firefox, Safari, modern Edge, Opera, Samsung Internet, and Internet Explorer 11, requires dash.js or Shaka Player on top of Media Source Extensions.
Desktop Chrome does not support MPEG-DASH natively in any version, from Chrome 4 through the current 150. Chrome 23 first added Media Source Extensions, so dash.js and Shaka Player work in Chrome 23 and later on Windows, macOS, Linux, and ChromeOS. Chrome for Android also requires a JavaScript player, since the OS media stack does not parse .mpd manifests.
Edge Legacy 12 to 18 supported MPEG-DASH natively through the EdgeHTML rendering engine on Windows 10. Chromium-based Edge 79 and later dropped that native demuxer in line with upstream Chromium. dash.js and Shaka Player still work in Chromium Edge through Media Source Extensions, so DASH playback survives in practice; only the native code path is gone.
Desktop Firefox has never supported MPEG-DASH natively. Firefox 42 first shipped Media Source Extensions on Windows and Linux, and Firefox 38 added MSE on macOS, so dash.js and Shaka Player run on Firefox 42 and later across all desktop platforms. Firefox for Android does not support DASH natively either; the same JavaScript-player path is required.
Apple has not implemented an MPEG-DASH demuxer in Safari on macOS or iOS, and the company recommends HLS instead. Safari 8 added Media Source Extensions on macOS, which lets dash.js drive DASH playback on macOS Safari 8 and later. iPadOS 13 brought MSE to Safari on iPad, and iPhone Safari added Managed Media Source from iOS 17.1, so iPhone DASH playback needs a player that targets that newer API.
Opera does not support MPEG-DASH natively across versions 9 to 131. Opera switched to the Chromium engine at Opera 15, which inherited Media Source Extensions, so dash.js and Shaka Player work on Opera 15 and later for desktop. Opera Mini does not support DASH at all, since the browser routes traffic through a server-side compression proxy that does not handle MSE.
Samsung Internet has no native MPEG-DASH demuxer in any version. The browser inherits Chromium's Media Source Extensions support from Samsung Internet 4 on, which lets dash.js and Shaka Player play DASH streams on Samsung Galaxy phones and tablets. The same Chromium media pipeline also handles Widevine DRM through Encrypted Media Extensions for protected content.
The stock Android Browser, which Google ships up to Android 4.4.4, has no MPEG-DASH support and no Media Source Extensions, so dash.js does not work on the legacy WebView either. From Android 5 on, most handsets ship Chrome for Android or a Chromium WebView with MSE, which is the only path that plays DASH on Android today.
Internet Explorer 5.5 to 10 has no MPEG-DASH demuxer and no Media Source Extensions, so DASH playback is impossible on those versions. Internet Explorer 11 on Windows 8.1 and Windows 10 added MSE behind a separate code path, which lets dash.js stream DASH content on IE 11. Microsoft has retired Internet Explorer; redirect IE traffic to Microsoft Edge instead.
Note: MPEG-DASH support is splintered across Edge Legacy, Chromium browsers, and iOS Safari. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!
MPEG-DASH combines codec-agnostic packaging, an XML manifest, and adaptive bitrate switching, which lets the same stream serve any HTTP CDN and any browser that supports Media Source Extensions. Six features carry most of the protocol's reach.
Both protocols deliver adaptive bitrate video over plain HTTP, and both can share the same fMP4 segments under CMAF. The differences sit in the manifest format, codec policy, native browser reach, and DRM coverage.
| Dimension | MPEG-DASH | HLS |
|---|---|---|
| Standards body | ISO/IEC 23009-1, MPEG | IETF RFC 8216, Apple |
| Manifest format | XML .mpd (application/dash+xml) | Plain text .m3u8 (application/vnd.apple.mpegurl) |
| Segment containers | Fragmented MP4, WebM | MPEG-TS, fragmented MP4 |
| Codec policy | Codec-agnostic; H.264, HEVC, VP9, AV1, Opus, FLAC all valid | Apple-defined codecs; H.264, HEVC, AV1, AAC, AC-3, EAC-3 |
| Native browser support | Edge Legacy 12 to 18 only | Safari, iOS, Chrome 142+, Edge 142+, Chrome Android 147+ |
| JavaScript player | dash.js, Shaka Player on top of MSE | hls.js on top of MSE for non-Apple browsers |
| DRM coverage | Widevine, PlayReady, FairPlay through CENC | FairPlay, AES-128, SAMPLE-AES |
| Typical latency | 2 to 10 seconds, LL-DASH about 3 seconds | 6 to 30 seconds, LL-HLS about 2 seconds |
Load dash.js or Shaka Player, point it at the .mpd manifest, and let the library parse the XML, fetch fMP4 segments, and feed them through Media Source Extensions to a standard video element. The same page works on every browser that ships MSE.
// dash.js feature-detect and attach pattern.
// Drop this into a page that loads dash.js from a CDN or your bundler.
const video = document.querySelector("#player");
const manifestUrl = "https://example.com/stream.mpd";
if (window.MediaSource && MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"')) {
// Chrome 23+, Firefox 42+, Safari 8+ macOS, Edge 12+, Opera 15+, Samsung Internet 4+.
// dash.js parses the .mpd manifest, fetches fMP4 segments, and feeds MSE.
const player = dashjs.MediaPlayer().create();
player.initialize(video, manifestUrl, true);
player.on(dashjs.MediaPlayer.events.MANIFEST_LOADED, () => {
console.log("DASH manifest loaded, ready for playback");
});
player.on(dashjs.MediaPlayer.events.ERROR, (e) => {
console.warn("DASH playback error:", e.error);
});
} else {
console.warn("This browser does not support Media Source Extensions, so MPEG-DASH cannot play.");
}If the video element fires no progress events, check that the server returns the manifest with the application/dash+xml MIME type and that the segment responses include CORS headers when the player and the stream sit on different origins.
DASH is mature and widely deployed, but the protocol still has rough edges that affect production playback. Plan for these before you treat DASH as a finished problem.
All MPEG-DASH version numbers and platform notes in this guide come from these primary sources:
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance