This is a pending blog that I have since I posted the announce of my Smooth Streaming video using Windows Azure Storage. I've been playing a lot with every component of the Smooth Streaming technology combining it with ASP.NET, IIS, Mono, Linux, PHP and more recently Windows Azure. There is someone out there playing with Amazon S3 but as part of a commercial offer and I don't know if he's making any money out of it.
For playing with Azure I took my inspiration from the Tim Heuer's blog Using Azure as a Silverlight Streaming replacement and the few comments regarding Smooth Streaming, the latest is about progressive download but pointed out the right tools to work with Azure Storage. Specifically CloudBerry for Azure Blob Storage despite having some trouble working with the special container $root was extremely helpfully.
If you read this blog Fragmented MP4 and Smooth Streaming you'll get the clear idea that once you get your videos encoded and uploaded to the server, the communication with the video player consists only of tiny calculable and very defined chunks. Also the request URL for each fragment is very clear and platform independent. The conclusion is that once you are able to precalculate the chunks you can trick your online cloud storage to put all of them as tiny files in the right location. I'll write a few words about the potentially inconvenience of this method at the end.
For calculate and upload the chunks I used the tool Mp4 Explorer(latest from the trunk) that allow me to do it in two steps.
- Open Mp4 Explorer.
- Calculate the fixed offset for each chunk. This step can help you for using Smooth Streaming with PHP too.
- Upload the chunks. You can monitor that the piece are in upload progress with the CloudBerry for Azure tool.
Once you get all the data uploaded select your favorite video player (I recommend you the latest version from the SMF's trunk) and point your source to the desired Manifest URL. In my case: http://az1543.vo.msecnd.net/videos/Big_Buck_Bunny.ism/Manifest. Remember to upload the clientaccesspolicy.xml file to the $root container using another tool, Azure Storage Explorer or Cloud Storage Studio.
You need to use the CDN endpoint in order to obtain the best result.
See the live example with the very famous Big Buck Bunny video at http://www.aldentorres.com/video/big-buck-bunny/.
Now some warnings. Part of the argument of using fragmented MP4 (fMP4) behind Smooth Streaming, is the inconvenience of having and managing a lot of tiny chunk files that apparently was a not so good experience in the first big Microsoft's deployment. For really small VOD personal scenarios this is not a problem, but for enterprise deployment it is simply unusable.
Upload the Big Buck Bunny took me about about 3 hours, but before doing any judgment, take account of the following:
- For a typical 10 minutes video like this , the file size for progressive download is about 70MB. In the Smooth Streaming encoded version with 7 quality levels it is about 566MB (8X).
- The API for Windows Azure Storage Services is in a beta stage, I don't know if it's using a kind of smart "keep alive" HTTP connection for successive upload connections.
- I used a typical residential internet connection with a limited upload speed and bandwith.
If you have a medium length movie, have plenty of time to encode it in several quality levels, plenty of time to upload it to the cloud and like play with new technologies, I recommend you giving a try. For me it was a lot of fun. I have a few ideas of how to support Smooth Streaming natively in Azure but I'm sure the Microsoft's team have a clearest idea of how to do it.

















7 Comments
Are you sure this is smooth streaming? It sounds to me like you broke the file into chunks and simply let them be downloaded sequentially using same progressive download. I get it you have 7 quality levels, but then so would any other progressive download with 7 files of different sizes. Also, Smooth Streaming (with capital case) is a feature name of IIS and is not enabled in Azure web role yet, and hence couldn’t possibly be used in this solution.
Nice post. I am assuming you are only using Azure for the storage of your video files.
As far as I know you can’t host IIS Smooth Streaming on Azure today. Please let us know how you are serving the videos.
@Anonymous
I’m sure about call this Smooth Streaming, since it’s a Microsoft’s technology easily ported to another platforms. The convenience of using IIS Media Extensions on IIS is that you don’t need to deal with a lot of tiny chunks in the server, but at the end you will have all the chunks in your cache proxy and over all the CDN network. It’s even smart precalculate the chunk’s offsets for the simple non-live VOD case.
Similar to Apple’s HTTP Live Streaming, it doesn’t matter what it’s in the server side, as long as you have the right client operating the actual heuristic.
Windows Azure Storage doesn’t have native support for Smooth Streaming but the current implementation is very close.
Of course, this is my opinion. What do you think about Smooth Streaming on the iPhone? (read the comments).
@Roeland
You are right, I’m only storing the the video files, but even more, all the chunks separately in a manner that the Silverlight client heuristic can retrieve all of them.
Try Gladinet Cloud Desktop, it support map a network drive letter to Azure Blob Storage. $root support is there. Free download at http://www.gladinet.com
@zack
Thx zack, I’ll have a look at it
nice how to post.. I don’t know much about Windows Azure Storage prior to reading this post but I like the way you have explained it step-by-step. Will have to try it myself and see how it works.. anyways thanks for the tutorial
2 Trackbacks
Social comments and analytics for this post…
This post was mentioned on Twitter by aldenml: Smooth Streaming with Azure Storage How to http://bit.ly/7E0fCE #azure #streaming #video…
중스의 생각…
Silverlight Smooth Streaming 을 Windows Azure에서 서비스하기…