【原文地址】Silverlight
【原文发表日期】 Monday, May 07, 2007 2:49 PM
上个星期一,我在拉斯维加斯的MIX大会上做了一个主题演讲,讨论了过去的一年里花费了我大部分时间的一个新项目:Silverlight。
Silverlight是个跨平台,跨浏览器的.NET插件,允许设计师和开发人员在浏览器中建造丰富的媒体体验和RIA应用。这个星期我们发布的预览版目前在Mac和Windows上支持Firefox, Safari 和 IE浏览器。
想感受一下使用Silverlight你都能建造哪类富浏览器应用的话,观看一下Metaliq的这个7分钟的“顶级香蕉(Top Banana)”视频编辑例程的录像:
“顶级香蕉(Top Banana)”应用是用C#开发的,可以在任何安装了Silverlight的系统上跨平台运行。整个应用的下载大小(意即在用户输入该网站的地址时,所有的XAML和编译过的代码的大小)只有50KB左右。我们将在今夏晚些时候作为例程发布这个应用的源码版本。
我的主题演讲
你可以在这里观看我的整个主题演讲(注:目前这个录像只显示了讲义和演示,一个星期内他们将更新推出一个更完整的录像版本)。
我非常幸运有一些很重要的客户在台上和我一起展示用Silverlight开发的一些非常丰富的体验,他们包括,Netflix(展示了一个很棒的“按需电影(movie on demand)”录像服务,同时支持社会网络), CBS (展示了用户产生的录像支持), Metaliq (展示了上面这个视频编辑应用) 和MLB.com (展示了他们精妙的棒球大联盟的新在线体验)。
在主题演讲中,我们还展示了你可以使用一些新的Expression Studio产品(包括Design, Blend 和Media Encoder产品)来建造可交互的视频播放器体验。我还做了一些开发演示,包括使用Visual Studio建造一个新的Silverlight项目,以及使用 .NET中的新Ruby支持在一个动态语言控制台里迭代开发一个Silverlight应用(该控制台是完全使用IronPython开发的,是在Mac的Safari浏览器中Silverlight里运行的)。
Silverlight 1.0
这个夏天我们将推出Silverlight的第一个版本。它着重于促成丰富的媒体场景,下载大小在1.2MB左右。它包括下面一些特性:
- 内置的codec支持,能在浏览器里播放VC-1和WMV视频, MP3和WMA音频。尤其是VC-1 codec, 在把媒体融入web体验方面是个很大的一步,因为它支持播放高达720p(高清晰度)的高品质视频。这个codec格式跟所有的HD-DVD和蓝光DVD播放器支持的格式是一样的,为数于亿计的移动设备,XBOX 360,Windows Media Center和Windows Media Player所支持,这允许 一个人把内容编码一次,在所有这些设备+Silverlight中毫无修改即可使用。这允许你使用庞大的现有视频内容和丰富的编辑工具来生成可用于Silverlight的视频内容。
- Silverlight支持渐进下载的功能,以及从任何web服务器播放媒体内容的能力。你可以将Silverlight指向任何含有视频/音频内容的URL,它就会下载这些内容,允许你在浏览器里播放这些内容。不需要特别的服务器软件,Silverlight可以与任何web服务器相合作(包括Linux上的Apache)。我们也将发布一些IIS模块,提供你可以在你的服务器上免费启用的有用的媒体控制和带宽控制特性。
-
Silverlight也可支持内置的媒体流广播(media streaming)。这允许你在后端使用一个象Windows Media Server这样的流广播服务器(streaming server),做视频/音频流广播(注:Windows Media Server是运行在Windows Server上的的免费产品)。流广播(Streaming)带来一些非常大的好处: 1) 它可以在用户在一个大的视频流里搜寻时改进用户的体验,2) 它可以极大地降低带宽的成本(大部分用户并不观看整个录像,所以在使用渐进下载时如果他们在视频结束之前离开的话,你就浪费了带宽)。
-
Silverlight允许你创造丰富的UI和动画效果,把矢量图像与HTML混合起来创造出引人入胜的内容体验。它支持一个Javascript编程模型来开发这些效果。一个好处是,它极大地简化了把这些体验集成进AJAX网页(因为你可以编写Javascript同时来更新HTML和XAML元素)。
-
Silverlight使得建造丰富的视频播放器交互体验极其容易。你可以把它的媒体能力与矢量图像支持混合起来创造你想要的任何类型的媒体播放体验。Silverlight包含了全屏的功能来创造一个完全沉浸的体验,以及直接在正播放的视频内容之上覆盖菜单/内容/控件/文字的能力(允许你促成DVD一样的体验)。Silverlight还提供了动态改变正在播放的视频的长宽的功能,而不要求视频流中止或重启。
你可以使用任何标准的文字编辑器来开发Silverlight应用,而不用特别的工具。微软也将通过Expression Studio配套产品发布针对Silverlight 1.0应用的支持,包括内容管理和视频编码的丰富的工具支持。你今天就可以在这里下载支持Silverlight的Expression Blend 和 Expression Media Encoder CTP预览版。
想进一步了解Silverlight 1.0的特性,以及如何开始开发针对Silverlight 1.0的体验的话,我强烈推荐你在这里观看最近发布到新www.silverlight.net社区网站上的一些精彩“How do I?”录像。
我也推荐你观看这些免费的MIX大会的分会场讲座,它们讨论了Silverlight 1.0和媒体场景:
Silverlight 1.1
在MIX上我们推出Silverlight 1.0的beta版本(这个夏天将推出1.0的最终版本)的同时,还推出了Silverlight 1.1的alpha版本。
Silverlight 1.1包括了.NET框架的跨平台版本,来促成在浏览器中的丰富的.NET开发体验。Silverlight 1.1安装包(包括所有的Silverlight 1.0的特性+CLR+WPF和.NET FX库API的一个子集+动态语言支持)的整个下载大小为4M左右,只需花少于20秒的时间即可在安装在一个机器上。
Silverlight V1.1包括下面一些特性:
- 一个内置的CLR引擎,给浏览器提供了超高性能的运行环境。Silverlight使用和今天我们发布的完整.NET框架一样的核心CLR引擎(是从同一个源码树编译出来的)。它提供了你今天的.NET代码使用的同样的类型系统,垃圾回收器,和JIT代码生成引擎。这意味着你编写出的.NET代码可以在Silverlight,ASP.NET,和 WinForms/WPF Windows应用中运行。它也意味着,你现在可以在浏览器里运行快于解释的 Javascript 250倍的代码。
- Silverlight包含了一个丰富内置类型的框架库,你可以用来开发基于浏览器的应用。这个框架库是你今天使用的完整的.NET框架类库的子集,允许你很轻松地重用你现有的技能和知识。它包括对集合,泛型,IO,线程,全球化,网络和LINQ的支持。
- Silverlight包含对WPF UI编程模型的支持。Silverlight 1.1 Alpha版本允许你使用托管代码/事件处理器来对你的UI编程,支持定义和使用封装的UI控件(由任何托管.NET语言开发的)的能力。第一个Silverlight Alpha还没有丰富的内置UI控件 -- 因为我们一直在先忙于建造核心的UI基础设施。但不用担心,将来版本一定会包括丰富的高层次的控件在内的,与此同时,你可以在这里下载一些很棒的控件例程。Silverlight的WPF最终也会发布对象布局管理器和数据绑定这样的核心WPF构造,这些特性在目前的alpha版本里还没有实现,但就要来了。
- Silverlight提供了一个托管的HTML DOM API,允许你用任何.NET语言对浏览器里的HTML进行编程,这意味着你现在可以使用C#或VB对一个HTML按钮连接一个事件处理器。Silverlight也提供支持,能让HTML页面里的Javascript调用你的Silverlight控件/应用向外呈示的.NET方法。Silverlight包含了一个JSON序列器,支持.NET数据类型与Javascript之间的转换,意味着你可以在Silverlight里使用标准的浏览器Javascript代码调用C#方法,然后让C#返回一个.NET集合,被Silverlight序列化为Javascript集合,为你的浏览器里的Javascript所用。
- Silverlight不要求后端的web服务器一定要使用ASP.NET,意味着如果你想要的话,你可以把Silverlight与Linux上的PHP一起使用。但是,我们自然会添加一些非常好的特性,允许你轻松地把客户端的Silverlight和服务器端的ASP.NET集成使用。Silverlight 可以使用标准的ASP.NET应用服务(成员,角色,用户信息等等),可以调用ASP.NET提供的WCF或ASMX web服务。这个星期,我们也会发布新的ASP.NET服务控件,方便在ASP.NET页面里使用Silverlight控件。
下面是我录制的一个22分钟的录像,示范如何使用Visual Studio和Expression Blend从头开始建造一个Silverlight应用(点击这里下载我使用的UI控件):
你可以点击下面这个图案下载一个非常好的海报,该海报对目前 Silverlight 1.1 alpha版本支持的一些主要的.NET命名空间和特性做了一个概述:

我还做了一个Channel9采访,你可以观看一下,进一步了解托管编程模型在Silverlight里的工作细节,以及我们是如何添加CLR支持的:
我也推荐你观看MIX大会的这些免费的分会场讲座,它们讨论了在Silverlight 1.1中使用.NET的场景:
你可以在Nick这里的网站上下载Part1/Part2讲座里例程的源码。
动态语言支持
在MIX上,我们还宣布发布了我们称之为“动态语言运行时(Dynamic Language Runtime)”(简称为DLR)的新.NET库的第一个版本。
我们为使.NET和CLR成为第一流的动态语言环境投资甚巨,一年多以前,我们在我的团队里组成了一个专门的开发组,专注于对动态语言建造更棒的CLR运行时支持,以及对流行的动态语言提供.NET上的优异实现。
新的动态语言运行时(DLR)往CLR里添加了一些为动态语言场景特别设计的服务。这些服务包括共享的动态类型系统,语言宿主模型和对方便生成快速的动态代码的支持。有了这些额外的特性,在.NET上建造高质量的动态语言实现就非常容易了。
非常重要的是,使用新的DLR支持建造的动态语言实现不是解释的。而是,我们使用在CLR 2.0里添加的轻量级的代码生成特性创建在内存里的IL,然后在运行时JIT到机器代码,而不用保存任何东西到硬盘上。这导致比解释代码好得多的运行时性能,轻量级的代码生成特性确保了一旦我们使用完了JIT过的代码,我们可以垃圾回收,以避免内存泄漏。这促成了非常精妙和强有力的动态语言编程环境,允许开发人员轻松地使用动态语言来对整个.NET API编程。
DLR以及建立在其之上的所有的动态语言,可用于浏览器里的跨平台Silverlight应用,服务器端的ASP.NET 2.0应用,和桌面上的WPF/WinForms应用中,即,基本上就是所有启用了CLR的地方。
在MIX上,我们宣布了微软将发布我们自己在.NET上实现的4门动态语言:
- Python
- Ruby (新)
- Javascript
- Dynamic VB (新)
我们将在CodePlex上发布我们的Python和Ruby实现的源代码,以及底层的DLR库的源代码,所有的源码都将在可完全修改的许可下发布。你现在可以在IronPython codeplex网站上下载DLR以及Python实现 (IronPython)。Ruby实现(我们将称之为IronRuby)的源代码,将在几个星期内在CodePlex上发布,等它有所进展之后。
想进一步了解我们的动态语言支持的话,我强烈建议你观看一下 John Lam 的这个15分钟的录像,他展示了一个用IronPython开发的动态语言控制台,在Mac上Silverlight里运行。它允许开发人员在浏览器里使用Ruby, Python, Javascript和VB交互性开发Silverlight应用(带有intellisense 支持!):
我也建议你观看MIX大会上这个免费的分会场讲座,它讨论了Silverlight1.1和动态语言:
Jim Hugunin,DLR的首席架构师,著有一个关于.NET中动态语言的精彩的博客,我建议你订阅这个博客,如果想理解DLR是如何工作的,你都能用它来做什么的话。
www.Silverlight.net
上个星期我们推出了我们最新的在线社区网站:http://www.silverlight.net
就象 www.asp.net 和 www.iis.net 一样,我们将使用这个新的Silverlight网站有规律地发布例程和“How-do-I?”录像。它也提供了一个论坛系统,你可以在上面得到Silverlight方面问题的帮助。
点击这里订阅我们在将来的几个月里将在这个网站上发表的新内容的RSS feed。
结语
Silverlight开创了无穷多的机会,来建造可以跨平台和跨浏览器运行的极其丰富的客户端体验。
对.NET开发人员来说,这意味着你现在可以在浏览器里(使用Silverlight),在web服务器端(使用ASP.NET),在桌面应用里,在移动设备里,使用任何开发语言(VB, C#, Javascript, Python, Ruby等等)来编写.NET 代码。你能够使用强大的Visual Studio开发人员工具和Expression Studio设计师工具来产生这些体验。
不用说,我对Silverlight的前景感到无比的兴奋。我们还有工作要做,缺陷要修补,高层次的UI控件/特性要添加,但我们上个星期发布的核心图像/媒体/运行时引擎是极其强有力的,为我们将来要建造的东西提供了一个非常稳固的可扩展的基础。
在将来的几个月内,我将在博客里发表更多关于Silverlight以及如何使用它的的贴子。
希望本文对你有所帮助,
- Scott
附注:上个星期我度假去了,所以主题演讲之后没有及时发布贴子。这个星期的其他时间我将去苏格兰度假,所以请原谅我不能对评议做及时答复,可能会晚几天才会答复。