16/06/2010 - Update, this info was current when it first was published, however please note that it isn't any longer. Both the Smooth Streaming SDK/PDK and the SMF have had new versions released since this post was originally published, see more info at http://www.iis.net/download/SmoothClient and http://smf.codeplex.com/. I'm hoping to get a post up coverering these new realeses in the near future.
Over the last year, a rather large part of my development work has included working with IIS Smooth Streaming, especially in relation to Silverlight.
When I started looking at Smooth Streaming, about a year ago, there were not many places around the web where you could find Smooth streaming development related resources. And although the pictures is somewhat better today, there’s still not a whole lot of good material around, so I thought I’d try and putt together some posts sharing my experiences with Smooth Streaming development.
My Smooth Streaming background
About a year ago I started looking at building a solution for one of our clients, one of the main features, was to provide a rather large quantity of video material to their online users. Some of the requirements included, that the video content had to be “synced” with other content on the screen. At certain points in the video, other content needed to change etc. however it also had to work the other way around. I.e. the video had to be able to respond to items on the screen being selected, by going to the corresponding spot in the video. As the client wanted a highly interactive and rich experience, and video delivery being such a large part. Silverlight was an natural choice for the general development technology, however how to deliver the video content took some consideration. Not having worked with media on the web previously I set out to see what the options were.
I quite quickly ran into to trouble, finding that neither of the two most common approaches progressive downloads nor streaming media really suited my requirements. Progressive download, which is in general the most used technique, just couldn’t provide a rich enough experience, especially when it comes to start up time and “jumping around” (seeking) in the video. Streaming Media provided a better experience but was still struggling to provide the level of smooth and rich experience we were aiming for. Plus the added complexity when it comes to requirements on servers and configuration for streaming, also added to making it a not so attractive option.
IIS Smooth Streaming
Luckily I remembered having recently heard about this new technology Microsoft had released called Smooth Streaming. After some initial research and tests, it quickly it became apparent that this was a pretty much perfect fit for what we needed. Very fast start-up time for the videos, almost instant seeking, support for markers in the videos and all of this provided by a free IIS plugin called IIS Media Services! Granted I never looked at what other companies beside Microsoft had to offer. A, I’m Working for a company specialising in the Microsoft stack, and B, once I had done some initial trials with Smooth Streaming, there was just no reason to look any further.
The development experience back in the day
The development experience back in those early days, left a lot to wish for. One of the major reason being that, as I mentioned earlier, there was almost no resources or documentation on how to build a Smooth Streaming enabled Silverlight player, on the web or elsewhere. Eventually Microsoft released a couple of templates for Expression Encoder which were Smooth Streaming enabled. And thanks to a blog post by Tim Heuer about “Using Expression Encoder templates in your Silverlight Applications”, I caught on to the fact that I could actually get hold of the source for those templates. So by looking at that code and by digging out the classes and libraries from there that I needed, I eventually managed to get my player going. I could of course have taken the source from one of the templates and just re-skinned it, however the template players included quite a lot of extra functionality and styles I didn’t need. Which would have added alot of extra size, to an already rather large xap file. Ripping out all the things I didn’t need, was an option but seemed like it would have been as much work as building my own. Anyhow, I got the player working and skinned as per the design, the client was duly impressed with the performance of the Smooth Streaming video delivery and was very happy.
For quite some time after Smooth Streaming was released, the development story was pretty much limited to what I just described, however over last few months, this has changed quite a bit.
IIS Smooth Streaming Player Development Kit (SSPDK)
It started with Microsoft releasing beta 1 of the “IIS Smooth Streaming Player Development Kit”, which included the “Smooth Streaming Player SDK” in October last year (2009). The “SSPDK” (trust Microsoft when it comes to naming things) includes, a tool called pushencoder for simulating live smooth streaming scenarios, a xap file with a “sample player” built with the SDK and a dll, which once referenced in your project gives you a “Smooth Streaming Media Element” (SSME) control to use instead of the standard Media Element.
The SSME (yes that’s what they’re calling it, see above comment about naming), has quite a lot of both basic and advanced functionality, including DVR capability for Live Smooth streaming and slow motion functionality, as well as fast forward and rewind. It also includes things like logging and ad playback integration, to help you with monetization (making money!).
Beta 2 of the SSPDK was released in January 2010, even though it’s version 2, it is still very much in beta and it shows. For one the documentation is till very sparse and if you add the SSME to a “page” and then open it in Blend, Blend promptly Crashes (Microsoft.Web.Media.SmoothStreaming.dll, fileversion 3.0.711.8).
Silverlight Media Framework
Shortly after the SSPDK was released, the Silverlight Media Framework was released for PDC09 in November 2009. The Silverlight Media Framework (SMF) is a Codeplex project under the Microsoft Public License, and it’s built on top of the SSPDK. The SMF codebase has been used for a number of the big Smooth Streaming “Showcase” projects on the web, like Wimbledon, Sunday Night Football on NBCSports, the UEFA Super Cup on Canal+, Roland Garros and the Tour de France on France Télévisions (Source smf.codeplex.com).
Since the initial release, there’s been another release and the current version is 1.1, however the team behind the SMF, only recently announced that they are now working on version 2.
In addition to the functionality provided by the SSME, the SMF also include things like support for markers, the possibility of including external data, alternative language tracks and more.
Plus of course the facts that it doesn’t crash when opened in blend and that they provide a number of videos and sample projects to show how to implement the SMF in a number of common scenarios.
So where does this leave us
Well basically, this leaves us in a heck of a better situation than we had a year ago, the development options are however still somewhat limited. Unless you want to use the source code from the player templates in Encoder, which I would probably only recommend if you pretty much like the template the way it is, and only want to make minor tweaks. The SMF is currently the only reasonably “accessible” option for doing custom Smooth Streaming Development, especially with the current lack of a fully supported Microsoft SDK.
Personally, I think the SMF seems like a very good project and a good option if you want to do Smooth Streaming development (disclaimer, I’ve so far only been playing with it, and not actually used it for any major project),
however the fact that it’s not an official product backed by Microsoft or any other company, might deter some people/companies. I've later been told by people involved with the Smooth Streaming project at Microsoft, that Microsoft is very much backing the SMF.
I’m sure that by the time the SSPDK gets out of beta, the current issues will be fixed and the people who doesn’t want to or can’t use the SMF, will have a viable option open to them.
Until next time
With that I think it’s time to wrap this up, I hope that at least someone has made it this far down the page and that you’ve gotten something out of it :-)
Until next time,