Simplified Adaptive Video Streaming: Announcing support for HLS and DASH in Windows 10
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. We're excited to bring these improvements to PCs, tablets, and phones with Windows 10.
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.
HLS and DASH
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:
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/vnd.apple.mpegurl')
- 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 new rendering engine 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 Platform using the “about:flags” settings. 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:
- https://www.nasa.gov/multimedia/nasatv/
- https://vimeo.com/channels/staffpicks/117827379 (and other Vimeo content)
- https://www.twitch.tv/riotgames/mobile (and other Twitch.tv mobile content)
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
Comments
Anonymous
January 29, 2015
Great summary, thanks! Can you lose the "pretty quotes" so that your code samples will copy/paste properly? This shouldn't be part of the indented/bulleted list: "•DASH: Use the MIME type for DASH mpd files:" "These features are part of the Experimental Web that’s provided in Windows 10." -- is there a less awkward way to say this?Anonymous
January 29, 2015
The comment has been removedAnonymous
January 29, 2015
@EricLaw [ex-MSFT] - Thanks for the feedback! These should be fixed now.Anonymous
January 29, 2015
Without dash encoding via TransformManager and Expression Encoder (have killed the product to promote azure media services), people are forced to use hls. Plus no SmoothStreaming support on IE?Anonymous
January 29, 2015
This is a huge milestone to supporting the best possible, natively accelerated, video solution for all developers. Congratulations IE team. Props also to the PlayerFramework team (playerframework.codeplex.com) for showing MS has game in the video space.Anonymous
January 29, 2015
@Ben - We have not tested against Dropcam specifically, but as long as they are serving up an HLS stream that is compliant with version 4 or less of the protocol, the content should play well in EdgeHTML. For any HLS or DASH content that is not being played back properly, we would love to hear about it. You can reach us either through Twitter @TheWebJustWorks, or by sending an email directly to hlsinfo@microsoft.comAnonymous
January 29, 2015
IE 11 in Windows 8.1 still does not play youtube videos. Is there any plans to support HTML5 player in IE 11. WebM VP8 and MSE & WebM VP9 show up as not supported. How about in Windows 10, is it supported.Anonymous
January 29, 2015
The comment has been removedAnonymous
January 29, 2015
How about Windows Phone: stackoverflow.com/.../14552820. After two years, we still cannot have live stream in WPIE and WP-SDK like we can do in Android and iOS without doing anything (literally one-liner code).Anonymous
January 29, 2015
Open IE v11, Firefox vlatest and Chrome vlatest. Navigate to github.com/.../files in all browsers (see the internal link, it should scroll down to #diff-1). Compare and figure out what is wrong with IE? Why it is so slow? Why is that it cannot handle a large content pages smoothly? Scroll up and down on that page on all three browsers and observe how IE has managed to become a worse browser. When you get the answer, fix this rendering issue. Have some refined paging infrastructure. If you cannot handle that, open-source IE. We will take care of this bug and millions of similar issues which only people in Microsoft are unable to reproduce.Anonymous
January 29, 2015
Windows 10 wil support ISO/IEC standard h.264 and h.265 codec video codecs. There is no use supporting google codecs vp8 and vp9 as they are inferior tot the these ISO/IEC formats.Anonymous
January 29, 2015
<Spartanへ求めてること> ・従来のIEエンジンも使えるようにする(レンダリングエンジンのモード切り替え機能の搭載) ・旧OS(Win 8.1は特に)向けにも配布してほしい(可能ならメインサポの終了した7も…と思ってみたり) ・IE11の不安定さを解消してもらいたい(安定性、高速軽快性のバランスを取らせるべきだ) ・「右側のタブを閉じる」コマンドを追加して欲しいのと、ドラッグ&ドロップ等をウィンドウ内自由にどこでも出来るように ひとまずこの辺りでしょうか。 あともうちょっと使いやすいUIにして提供して下さい。 脆弱性もなるべく減らせるように努力してもらいたいですな。Anonymous
January 29, 2015
@MSC - those codecs may be inferior but ignoring the second largest source of video content on the web (after Netflix) does not seem to be an option. If the customer needs to download another browser to enjoy youtube, she will most probably use it for other content as well.Anonymous
January 29, 2015
Supporting HLS and MPEG-DASH seems great but what about Microsoft's own Smooth Streaming? Is it supported as well or does it mean that smooth streaming content will have to be repackaged on the server to HLS or MPEG-DASH?Anonymous
January 30, 2015
I have yet to come across a video on YouTube that isn't delivered as MP4 to browsers that don't support VP8/VP9. Even Google seems to have recognized that large portions of the Web won't move from MP4 to WebM - not only due to missing hardware decoding support on mobile devices but also due to the fact that both Microsoft and Apple are sticking with h264 only. Right now I fail to see the issue. Given that with Firefox now the last browser has added h264 support (I believe Cisco is paying the licensing fees to enable them to use it in Video conferencing) we have all browsers support h264 and only 2 supporting VP8/VP9 (WebM).Anonymous
January 30, 2015
Will W10 app developers also be able to (easily) play HLS streams within their apps? (e.g. via the Player Framework)Anonymous
January 30, 2015
8より使い難くなりそうなWindows 10の現状(2015年1月) bto-pc.jp/.../windows-10-tp-build-9926.html もう7風に戻してよ、少なくともデスクトップは。 SpartanもIEベースでUIは作っていただきたい。Anonymous
January 30, 2015
The comment has been removedAnonymous
February 02, 2015
Please allow and support Ad block plus.That's only extension will save IE and Future IE developments.Anonymous
February 02, 2015
Adblock plus is already supporting the current IE11 version on windows 7 and 8. adblockplus.org/.../internet-explorer