Internet Explorer 11 in Windows 8.1 introduced support for Professional Quality Video using Media Source Extensions (MSE) and Encrypted Media Extensions (EME). With Windows 10, Microsoft is announcing browser support for HTTP Live Streaming (HLS) and enhanced support for MPEG DASH in the new EdgeHTML rendering engine. These new features automate adaptive streaming, and make it very simple for Web sites to take advantage of professional quality video.

Taking advantage of these new features is as simple as setting a media manifest as the HTMLMediaElement source. New streaming features in Windows 10 do the rest. These include:

  • Automated support for the HLS and DASH adaptive bitrate streaming protocols.
  • Support for MPEG-2 Transport Streams within Media Source Extensions.

These new features reflect our strong belief that everyone benefits from common media delivery and encoding formats, and also reflect our ongoing commitment to simplify the development of plugin-free video delivery on the Web.

Adaptive Bitrate Streaming

Web-delivered video content has rapidly shifted away from downloading and playing a single video file to an adaptive approach designed to support a broad array of network conditions. Unlike playback of a single file, adaptive streaming allows Web developers to host multiple bitrate versions of a single video on their server, and then author an intelligent client that dynamically switches between these versions during playback. This allows the client to react to changing network and device conditions in order to provide the best possible experience for the user.

As you can imagine, building a client that handles adaptive streaming can be a lot of work, even starting with reference designs like the DASH.js reference player. Client JavaScript which utilizes Media Source Extensions APIs often needs to do some heavy lifting, including:

  • Parsing content manifests or file headers to identify available media files and bitrate information
  • Setting and managing one or more SourceBuffer(s) as the HTMLMediaElement source
  • Downloading and appending content segments to the SourceBuffer(s)
  • Handling media events such as seek and scrub
  • Tracking performance and adapting segment bitrates to fit current conditions

Some Web sites will want to control these details of streaming, and for them Media Source Extension APIs are sufficient. They will be able to continue using them in Internet Explorer. But other sites will benefit from automating these details.


While a wide range of video streaming protocols have been introduced and adopted over the years, two stand out today: HTTP Live Streaming (HLS) and Dynamic Adaptive Streaming over HTTP (DASH). HLS is a video delivery protocol developed by Apple and required for long-form video delivery to iOS devices over a cellular network. This protocol has seen broad adoption over the past few years, and is supported natively in all Safari endpoints, as well as in Chrome on Android. DASH, on the other hand, is an ISO standard that has been developed through close collaboration by many companies and is beginning to see uptake throughout the video ecosystem. Each of these protocols offers unique advantages and disadvantages, and we are excited to bring native support for both to Windows 10.

It’s normal for HLS implementations to accept a manifest (.m3u8 or .m3u) as a media source. An adaptive video element using HLS can be declared simply in HTML by setting the manifest as a source, like this:

1 <video id="video" controls width=640 height=360 src="myvideo.m3u8"></video>

view raw adaptive video element hosted with ❤ by GitHub

The concept is as simple as HTML5 media, and with properly prepared MPEG-TS content, provides a simple means for Web sites to implement adaptive streaming. We’ve extended this concept to DASH as well, so Web sites with DASH ISO-BMFF content can set a DASH manifest (.mpd) as a source to implement adaptive streaming. MPEG DASH categorizes this as Type 1 streaming. It couldn’t be simpler.

The details are important, so here are a few about how we’ve implemented HLS and enhanced DASH:

  • HLS: Our native HLS player fully supports up to protocol version 4 (draft 8). HLS is designed to work with MPEG2-Transport Streams, and we’re excited to include support for this from within our Media Source Extensions implementation as well (more on this below).
  • DASH: Our native DASH player is designed to work with the Live Profile as defined in the ISO specification. Our initial release is focused on supporting single period video on demand (VOD) content, but we’ll be working with the industry to introduce additional features based on feedback and marketplace trends. This profile is designed to work with ISO-BMFF MP4 content, which has been supported by our Media Source Extensions implementation since Windows 8.1.

Media Source Extensions

These new HLS and DASH features in IE will dramatically simplify development of Web delivered video applications. They aren’t the only solution, but a new simple option. We recognize that for some developers it is necessary to maintain a custom streaming stack. For them, we have added MPEG-2 Transport Stream support to MSE. With Windows 8.1 we introduced support for ISO-BMFF MP4 content in MSE, and with Windows 10, we will now support both ISO-BMFF and MPEG-TS. This gives Web developers the option of using our abstraction layer that automates adaptive bitrate streaming details or implementing a fully custom solution using either format.

Detecting HLS and Enhanced DASH Support

Web developers can detect HLS or our enhanced DASH manifest support using HTML5’s canPlayType method:

  • HLS: Use one of 4 optional MIME types for HLS m3u8 files (we recommend the first two):
  • video.canPlayType(‘application/’)
  • video.canPlayType(‘audio/mpegurl’)
  • video.canPlayType(‘application/x-mpegurl’)
  • video.canPlayType(‘audio/x-mpegURL’)
  • DASH: Use the MIME type for DASH mpd files:
  • video.canPlayType(‘application/dash+xml’)

Trying This Yourself

These features are part of the Experimental Web that’s provided in Windows 10. HLS is in Technical Preview releases now, and DASH is currently still in development, but expected to be in preview releases very soon.

To try these features yourself, first enable the Experimental Web using the “about:flags” settings we’ve previously described in our Living on the Edge blog. Disable plugins as well, since some sites rely on plugins first and fall back to HLS. With the Experimental Web enabled and plugins disabled, try any site that uses HLS or DASH for video delivery.

Some examples are:

If you are interested in building a page of your own, simply set the source of a <video> tag to a conformant .m3u8 (HLS) or .mpd (DASH) and IE will recognize the content and begin playback.

As with any preview release, we still have work to do to polish the feature before broad release, but we’d love your feedback on the experience as it stands today. In coming releases you’ll see additional improvements to both our HLS and DASH parsers, as well as the streaming engine that controls the experience. We look forward to continuing our work with the broader industry to develop an interoperable and plugin-free future for Web delivered video. Follow along with our progress on status.modern.IE and let us know what you think on Twitter @IEDevChat.

David Mebane
Program Manager, Media

Jerry Smith
Senior Program Manager, Internet Explorer