One of the core priorities we focused on when building IIS 7 was to enable a rich .NET extensibility model that provides developers with the hooks to easily plug-in and extend the web server.
Last month I blogged about our ASP.NET MVC Roadmap. Two weeks ago we shipped the ASP.NET Preview 2 Release. Phil Haack from the ASP.NET team published a good blog post about the release here. Scott Hanselman has created a bunch of great ASP.NET MVC tutorial videos that you can watch to learn more about it here.
One of the things I mentioned in my MVC roadmap post was that we would be publishing the source code for the ASP.NET MVC Framework, and enable it to be easily built, debugged, and patched (so that you can work around any bugs you encounter without having to wait for the next preview refresh release).
Today we opened up a new ASP.NET CodePlex project that we'll be using to share buildable source for multiple upcoming ASP.NET releases. You can now directly download buildable source and project files for the ASP.NET MVC Preview 2 release here.
Building the ASP.NET MVC Framework
You can download a .zip file containing the source code for the ASP.NET MVC Framework for the release page here. When you extract the .zip file you can drill into its "MVC" sub-folder to find a VS 2008 solution file for the project:
Double-clicking it will open the MVC project containing the MVC source within VS 2008:
When you do a build it will compile the project and output a System.Web.Mvc.dll assembly under a \bin directory at the top of the .zip directory. You can then copy this assembly into a project or application and use it.
Note: the license doesn't enable you to redistribute your custom binary version of ASP.NET MVC (we want to avoid having multiple incompatible ASP.NET MVC versions floating around and colliding with each other). But it does enable you to make fixes to the code, rebuild it, and avoid getting blocked by an interim bug you can't work around.
Our plans are to release regular drops of the source code going forward. We'll release source updates every time we do official preview drops. We will also release interim source refreshes in between the preview drops if you want to be able to track and build the source more frequently.
We are also hoping to ship our unit test suite for ASP.NET MVC in the future as well (right now we use an internal mocking framework within our tests, and we are still doing some work to refactor this dependency before shipping them as well).
Hope this helps,
Video on the web is now one of those common scenarios that every user takes for granted, and increasingly every major site is incorporating in some form (product videos, training videos, richer advertising scenarios, user generated content, customer testimonials, etc).
One of the challenges when adding video to a site, though, is delivering it in a way that doesn't cost a fortune. Network bandwidth costs a lot of money, and the cost of high quality video usage can quickly add up.
The blog post below provides a quick overview of some of the options you can use to reduce the cost of delivering video, and discusses a new free download - the IIS 7.0 Bit Rate Throttling Module - that was released a few days ago and which enables you to easily save money when serving video from an IIS web server using any video technology (including Silverlight, Windows Media Player and even Flash).
Option 1: Using a Video Hosting Service
One approach you can take to reduce video bandwidth costs is to use a video hosting service like YouTube or the free Microsoft Silverlight Streaming Service. This allows you to use someone else's network to deliver the video content, and avoid having to pay the bandwidth costs yourself.
If you aren't familiar with the Silverlight Streaming service, it allows you to upload up to 10GB of videos and download 5 Terabytes/month of video content (at up to a 1.4 Mbps bit-rate) for free. You can build any custom Silverlight client player application you want to embed the video within it. This means it doesn't require a specific video player look and feel, nor a service logo/watermark to play the video. This allows you to fully integrate the video into your site and use whatever UI you want to host it.
Option 2: Hosting Video on Your Own Servers
Sometimes using a video hosting service doesn't make sense (for example: you want to use custom authentication to grant/deny user's access, you want to play really long video segments, or you want to serve up custom ads in your videos). Instead you might want to serve the video up from your own servers and have complete control over it.
There are typically two options you can use to deliver the video from your servers: using a streaming approach or a progressive video download approach:
Streaming Server Scenario
In a streaming scenario a client (like Silverlight, Windows Media Player, Flash or Real Networks) connects to a streaming server. The streaming server then sends down the video stream to watch, and typically enables a user to dynamically skip ahead/behind, pause or stop the video stream. When the user closes the browser or navigates away from the page the video stream automatically stops transmitting.
Windows Media Services (WMS) is a free streaming server download available for Windows, and can stream video to both Windows Media Player and cross-platform Silverlight browser clients. It is generally regarded as the most server scalable and cost effective way to enable video streaming on the web, and handles both on-demand file streaming scenarios (for example: streaming a .wmv file) as well as live stream scenarios (for example: a sporting event like the Olympics that is happening live in real time).
Windows Media Services can be used on any version of Windows Server - including the new Windows Server 2008 Web Server edition (which only costs $469, enables up to 4 processors and 32GB of RAM, and supports IIS, ASP.NET, SharePoint, and Windows Media Services).
Progressive Download Scenario
In a progressive download scenario a client (like Flash or Silverlight) downloads a video directly off of a web-server, and begins playing it once enough video is downloaded for it to play smoothly.
The benefit of using a progressive download approach is that it is super easy to setup on a web-server. Just copy/ftp a video up to a web-server, obtain a URL to it, and you can wire it up to a video client player. It doesn't require any custom web-server configuration, nor require a streaming server to be installed, in order to enable.
The downside of using a progressive video download approach, though, is that web-servers are by default designed to download files as fast as possible. So when a user clicks to watch a video on your site, your web-server will attempt to transmit it to the client as fast as possible. This is fine if the user decides to watch the entire video. But if the user stops watching the content half way through the video (or navigates to a different page), you will have downloaded a bunch of video content that will never be watched.
If the remaining un-watched video content is several megabytes (or even tens of megabytes) in size, you will end up over time spending a lot of money on bandwidth that is not benefiting your business/site at all....
IIS 7.0 Bit Rate Throttling Module
Last week the IIS team shipped a new free IIS 7.0 bit-rate throttling module that makes progressive video scenarios much cheaper in cost.
The bit rate throttling module enables you to easily configure bandwidth throttling rules for any type of media content downloaded from an IIS web server (including .WMV, .MOV, .FLV and .MP3 files).
Out of the box, the bit rate throttling module causes IIS to quickly transmit a burst of initial media content when a file is requested. By default the rules are set to look at the mime-type and bit-rate encoding of the file, and send as fast as possible enough of the media file to play 20 seconds of it. Once the video client has 20 seconds of the media to play, the IIS bit rate throttling module will then throttle down the transmit rate to equal the bit-rate encoding of the file. It will then monitor whether the video player on the client ever closes or navigates to a different video, and automatically stop the remainder of the file being sent if the user goes away.
For example, if you are playing a 35MB video file that is encoded at a bit-rate of 500 Kbps, IIS will send a 20 second burst of the video (20 seconds @ a 500Kbps encoding == 1.25MB of content) as fast as possible to start the video client playing, and then download the remainder of the video at a download rate of only 500 Kbps (enough so that the user always has 20 seconds of video cached on the client so that they never get buffered).
If after a minute the user gets bored and either stops the video or navigates to a new page, IIS will detect that they went away and stop transmitting the remainder of the 35MB file. Since IIS only downloaded 80 seconds of total video in this scenario (the 60 seconds that the user watched + the 20 second buffer window), only 5MB instead of 35MB of network bandwidth ended up being used. 30MB of bandwidth savings repeated hundreds or thousands of times a day can easily translate to thousands of dollars of bandwidth savings per year....
IIS 7.0 Bit Rate Throttling Module Download and Installation
You can download and learn more about the IIS 7.0 bit-rate throttling module here.
Once installed, you can click the "Bit Rate Throttling" node in the IIS admin tool:
And then configure whatever bit-rate throttling rules you want on a per file or per file-type basis:
The below whitepapers describe how to enable and use it more:
- Bit Rate Throttling Module Setup
- Bit Rate Throttling Configuration Walkthrough
- Bit Rate Throttling Extensibility
Hope this helps make your video scenarios more cost effective,
I'm slowly recovering from keynoting at MIX last week, and have been digging my way out of backlogged email the last few days. I'm going to try and finish catching up on blog comments this weekend - apologies for the delay in getting back to some of your questions.
This week I'm visiting Scottsdale Arizona and will be presenting at a free user group event during the day. I'm presenting two sessions myself:
1) Developing Applications using Silverlight 2: This will be a drill-down into the new Silverlight 2 Beta1 release, and how you can build applications with it using VS 2008 and Expression Blend. You'll leave this session with a good understanding of the basics of Silverlight programming and how to start building applications with it.
2) Developing Applications using ASP.NET MVC: This session will be a drill-down into the new ASP.NET Model-View-Controller framework option (which last week was updated . You'll leave this session with a good understanding of what it is, how it works, and how to start building ASP.NET web applications with it.
In addition to my sessions above, there will also be great sessions at the event from Microsoft employees on "Consuming Web Services with Microsoft Silverlight", "Encoding Video for Microsoft Silverlight", and "Serving Applications with Microsoft Silverlight Streaming".
Hope to see some of you there,