Yesterday (7-Jul-2010), the Silverlight Media Framework v2 was released on Codeplex (yeah, it’s Open Source).  If you aren’t familiar with it, it is a Silverlight framework encapsulating the best practices for media playback for Silverlight applications.  It is both a framework and, in v2, they also provided compiled simple player XAPs that you can just drop in HTML.  If you are building apps, you’ll want to take a look at the framework in more detail, but if you want a solid media player experience grab the players too.

Since I use Windows Live Writer as my blogging tool, I wanted to share my workflow for embedding videos into blog posts (or other content that I can author using Live Writer).  First, grab the necessary tools:

Install the Dynamic Template add-in for Writer.  Next step is to put your ProgressiveDownloadPlayer.xap somewhere.  This doesn’t matter, as along as you know the URL to it.  I keep mine on my cloud storage share since I can re-use it in various places.  Once all those pieces are in place here is what I do.

Step 1 – Create the Dynamic Template

In order to create a template, you have to execute the Insert function for Dynamic Template to bring up the dialog.  Once there, choose to Edit Templates and give it a name.

Dynamic Template insert dialog

Then in the template code, copy this HTML:

   1: <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="640" height="480">
   2:   <param name="source" value="URL_TO_YOUR_PLAYER_XAP" />
   3:   <param name="background" value="white" />
   4:   <param name="enableHtmlAccess" value="true" />
   5:   <param name="minRuntimeVersion" value="4.0.50424.0" />
   6:   <param name="initParams" value="MediaUrl=<%= VideoUrl %>,AutoPlay=false,ThumbnailUrl=<%= ThumbnailUrl %>" />
   7:   <param name="autoUpgrade" value="true" />
   8:   <a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=4.0.50424.0" style="text-decoration:none">
   9:       <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none" />
  10:   </a>
  11: </object>

And in the settings use these in this screenshot:

Code variables

Of course, replace with the URL to your player location.  That’s it, that is your template.

Step 2 – Prepare your media

I’m assuming that you already have media to display, but if you don’t, use your favorite media encoding tool to create the media and have the URL.  Note that it doesn’t have to be an absolute URL, but just understand the paths of your web app if you plan on using a relative URL.  Personally I recommend using an absolute one always.

Also the snippet above, while not required, implements the ThumbnailUrl (thanks Kevin) parameter for the player.  You’ll need a URL to a thumbnail image for preview.

Step 3 – Execute the template

Now that you have the template, you can use it.  Rather than talk about it, here’s an embedded video (using the process) demonstrating the process :-)…

Get Microsoft Silverlight

Simple, huh? Now of course you cannot see the final result in Writer (not sure why actually but I think it has something to do with the rendering techniques they use in authoring mode (hence the white box in the vid), but you can see the end result!

Summary

Silverlight Media Framework is awesome.  Live Writer is awesome.  Awesome+Aweomse = Awesomely Awesome.  Kidding aside, if you have similar workflows to me, this should help you.  It has streamlined the content publishing process when I need it in a simple, but efficient way.

Hope this helps!

SilverlightShow.net is one of those great community sites providing information, tutorials and general developer information around Silverlight.  They’ve done a great job providing a spectrum of beginner to advanced topics on Silverlight development. 

At MIX10 I was talking with one of the brains behind the site (and Silverlight MVP), Emil Stoychev, one one of the ways they had been displaying book recommendations on their site.  It was a bookshelf view that I thought was cool and I wanted to use it for my own book recommendation list on my blog. 

NOTE: It was funny in talking with Emil because they had this bookshelf control for a while and then the iBooks app for iPhone/iPad came out and looked really familiar.  Of course, the user experience isn’t something entirely new for displaying this type of information, but it was cool to see consistency.

I asked Emil if I could use the control and showcase some of the work they do on that site.  They carved off a little area where I could manage my books and here it is:

SilverlightShow bookshelf

You can see it running live and interact with it on my Silverlight Book Recommendations link here on this site.  I think it is a lot better than just a standard list of links.  Now I just need to fill up the shelves so they don’t look so empty!

Thanks Emil and SilverlightShow!  And to answer in advance, I’m not sure if they plan on releasing this as a sample control or what…that is something you’ll have to head over to their site and ask them (and check out their material as well).


July 1st is here…time for an updated Windows 7 Smashing Magazine theme pack!

Smashing Magazine July 2010 Windows 7 Theme

The July themes seem to be focuses on more 'summer' things.  Not as many Independence Day things as I would have suspected, but shows a good international design contribution.  So here is your July 2010 Windows 7 Theme Packs for wallpapers – unfiltered and uncensored – about 35 wallpapers in all.

For details on these and to see past ones, visit the Smashing Magazine Windows 7 Theme information for the specifications I used for the theme pack as well as previous themes.  Want to participate and submit yours?  Join in!

Each quarter, new MVP (Microsoft Most Valuable Professional) candidates are awarded.  January 2010 is the first awards of the year and so I present the new/moved/re-awarded Silverlight specific MVPs:

The following have been renewed this year – congratulations and keep up the good work!

Congratulations to everyone above and keep up the great work of showing us what Silverlight is all about!

A while back I had sent out an update on Twitter that I was sitting in a meeting reviewing some “top issues” for Silverlight as reported through various channels (official support, forums, social media outlets, blogs, incoming emails, etc.).  It really seemed to be a holistic view of incoming feedback from all over the place.  People asked if I’d share the issues we discussed and I thought it would be interesting to see what people are facing.  Interestingly enough, almost all of these are solvable and, at least in my mind, not ‘issues’ but learning opportunities (for developers *and* us).

So here they are…I think some may surprise you.

WPF and Silverlight feature parity

It’s a little weird to call this one an issue with Silverlight, but this was seen requested more often in these areas that it is worth calling attention to.  Some of the genesis of this angst comes from an expectation that WPF applications ‘just work’ in Silverlight and not understanding the areas of the subset in both XAML and the .NET base class libraries (BCL).  The other part is more of a future suggestion to bring the XAML platforms closer together.  Pete Brown had a good post in December last year sharing thoughts on this future roadmap: The Future of Client App Dev.  It is a good read.

In the interim, note that those parity type items people are requesting are being looked at.  Specifically, I’d encourage you to search for already logged suggestions and/or provide new ones of specific features you might like to see in Silverlight.  We’ve set up a place for you to do this at http://silverlight.mswish.net.  There is a growing list (yes, I need to ensure I prune the crap out more frequently) that the team looks at for futures planning.  This is for suggestions and not bugs.  For ways on providing feedback to the Silverlight team see my post on the subject.

Again, it is hard to call this an ‘issue’ but I wanted to list it, and call out that we are aware of this desire.

Silverlight and WCF configuration issues

As a beginner to Silverlight you’ve likely experienced this.  Start a new project, write a service on the web project, do Add Service Reference in your Silverlight project and you start coding away.  Life is wonderful, you’re getting results and you polish your application.  Then you move it to production and you start getting the dreaded NotFound issue.  You bang your head on a wall for a while trying to figure out why.  If you are lucky, you remember that the reference was to localhost, most likely, and you simply change it to the appropriate endpoint URI and you are on your way.

But this is frustrating right?  There has to be a better way?  Or perhaps you are having x-domain issues with WCF/Silverlight and you need a way to debug?  Or perhaps everything actually is configured and you have legitimate exceptions but they all surface as NotFound and you want to strangle someone?

Luckily, there are methods to solve these issues.  Yavor, the lead PM on these features for WCF/Silverlight, has commented on these specifically:

  • NotFound and faults
  • .clientConfig service URI issues
  • PollingDuplex
  • Debugging cross-domain errors

This is one of those issues that has answers, but they apparently are not surfaced well enough (or you tell me?  do people just not search the docs?).  I would encourage you to read Yavor’s post on the documented solutions and the plans/inquiries about the future and how things should work.  As an example, we are considering making the fault configuration the default by modifying the Silverlight-enabled WCF Service item template.  Take a look at his post and make some comments about the plans!

Installation and deployment

I’ve seen this a lot.  People saying that they have Silverlight installed and they went to a website that prompted them to install Silverlight, so they did (again) and they went back and were prompted again…rinse, repeat.  The other is that people (your users) aren’t getting prompted for upgrades properly or they aren’t working well with applications.

It is true that we put a lot of responsibility on the developer to customize the installation experience for the developer.  I’ve written about this a few times.  In fact, I called out what I believe to be the best encapsulation of the tenets of a good experience in what Netflix does: Silverlight Install Best Practices.  We have also posted a whitepaper on the Silverlight community whitepaper area for the Silverlight Installation Experience Guidance which basically incorporates these tenets into guidance and sample code as well.  This is a helpful whitepaper to understand the events of the plugin in upgrade situations and how easily you can handle them.

Most of the support issues we see are because the application isn’t properly handling these situations.  One could ask that why we, Microsoft, aren’t providing a better default template that includes all these best practices.  We’ve wrestled with this idea quite a bit actually.  In the end, we didn’t feel right now we could come up with a universal application template that would meet the needs of all app developers (different sizes, use cases for their Silverlight app).  Some things are easier such as media applications coming from Expression Encoder, for example, where we know the size and use of the application.  In fact, those templates have already been enhanced for a better experience than the default install badge.  It is still on our list to provide better out-of-the-box templates in Visual Studio, but we balance that with other features that are on the list for prioritization for customers.

In the end, this is a very solvable issue and again it appears that discovery of the solution could be better.  Help me understand how we can better surface this?

Silverlight browser support matrix

A little bit associated with the above install/deployment issue, we see reports of people saying Silverlight works with IE but not Firefox and also people saying “Silverlight doesn’t support Mac” and other claims.  Let’s be clear.  In the simplest terms we support:

  • Windows: Internet Explorer, Firefox, Chrome (SL4 only)
  • Mac: Firefox, Safari

The full support matrix with explicit versions, etc. is available here.  Where things aren’t working when they should (i.e., Firefox on Windows) that is things I want to know about.  There was an issue early on with Firefox and our detection script that application developers in some apps may never have updated.  This would have triggered the install badge instead of realizing it is already there.  However this was a Silverlight 2 issue and long since fixed.  Again, if there are apps that aren’t working in the supported matrix, I want to know about them!

Aside from that, we’ve never hid our support matrix.  On top of that Linux clients are provided support through the Moonlight project from Novell (and the Mono team).  Yes, at present Moonlight isn’t at 1:1 version parity with Silverlight, but they are aggressively working as fast as they can.  In fact we ensure that our detection script identifies Linux clients and points to the Moonlight installer, where appropriate!

Again, I think this is a solvable issue that is done with arming of information.  If we aren’t providing enough, where do you think I can do better?

Media-related errors

Are you seeing the 4001 AG_UNKNOWN_ERROR message too much in your media application?  The support issues coming in on this front are primarily for DRM-related situations.  In the most recent Silverlight release (4.0.50524.0) we enhanced the DRM-related media errors to provide a better differentiation to what they are and separate them from other issues.  These will now surface in 6000 series errors.

Even further we are making further diagnostics to other media-related error codes in a future servicing release to get even more granular based on feedback we’ve already provided. 

If you are a developer of a media-related application and are seeing media 4001 errors, please upgrade to the 4.0.50524.0 build and let us know if that helps.  If it doesn’t, please contact me and I’ll send you some diagnostic code to help get us better information about what is surfacing.

Summary

I personally found it interesting how ‘low bar’ these issues seemed to me.  Like I said, I believe them all to be solvable with existing solutions that apparently aren’t as discoverable to developers.  Some are actually in the docs though, but I have to admit as a developer myself how much I usually consider docs a last resource.  If you have ideas of how we can better surface these types of information, please share it.

So there you have it…the more top related issues to Silverlight (aggregate through various channels).  What do you think?