专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »博文摘选 » IIS 7 Smooth Streaming技术在Silverlight 3中的应用 »正文

IIS 7 Smooth Streaming技术在Silverlight 3中的应用

来源: 发布时间:星期六, 2010年1月9日 浏览:0次 评论:0
  微软全新代操作系统将IIS 7(Internet Information Services 7)引入到人们视线中作为IIS 6.0个升级版本IIS 7在很多地方都做了改进诸如模块化服务功能和.NET无缝集成简单操作和部署改进管理功能以及安全性、过程改进、诊断、兼容性等很多新特性要想全面了解IIS 7所带来更多新特性可以查看“探索用于Windows VistaWeb服务器和更多内容”

  IIS 7很多功能都是作为模块(插件)被集成到服务器上默认安装IIS 7上已经集成了很多常用功能下图展示了IIS 7上些常用模块



2010-1-8 13-32-41
  IIS 7支持很多插件The Offical Microsoft IIS Site上列出了当前IIS 7上所有扩展如SEO(Search Engine Optimization Toolkit搜索引擎优化)Web Platform Installer(如上图中已安装在Management分类下)Application Request RoutingURL Rewrite Module(我在“使用URL Rewriter进行URL重写失效”和“ASP.NET URL双向改写实现”中详细介绍过在非IIS 7环境写如何通过ASP.NET实现URL重写现在IIS 7已经将这个功能集成了)Smooth Streaming(这个功能是本文即将要介绍)等IIS 7这些插件在很大程度上给站点开发人员带来了便利性可能以前我们需要在Web中添加许多很复杂代码才能实现功能现在借助于IIS 7和插件几乎不用修改任何代码就可以搞定是不是让人觉得很兴奋呢?先别着急要想了解或掌握IIS 7这些插件还是需要耗费点时间The Offical Microsoft IIS Site官方网站WebSite上有许多详细介绍和举例可供我们学习和研究

  在本文中我想重点介绍下Smooth Streaming技术应用

 

什么是Smooth Streaming?

  官方站点上有详细介绍和举例相信也有许多人已经见过了还记得那个生动动画短片Big Buck Bunny吗?那个有趣影片很好地展现了Smooth Streaming技术在Silverlight 3中应用那么究竟什么是Smooth Streaming技术呢?个很好解释就是Smooth Streaming是IIS Media Services扩展它使得Silverlight客户端可以通过HTTP来适应流媒体带宽通过对视频源文件(如wmv等常用视频文件格式)特殊处理会在服务器上按照区别带宽要求生成多个区别版本视频文件副本IIS在接收到Silverlight客户端请求后再决定将哪个视频文件副本通过流媒体发送到客户端这个过程是完全动态也就是说当客户端带宽发生变化时传送流媒体视频文件副本也会相应地改变如当前客户端带宽在300kbps以下则当前流媒体文件副本可能为280kbps那个;当客户端带宽上升到1mbps时当前流媒体文件副本就可能变成1.5mbps那个了是不是觉得很神奇啊?当然所有这些都是需要IIS 7和Silverlight 3.0支持

 

需要些什么?

  事实上我在研究Smooth Streaming技术的前已经有很多人介绍过它了看来它也不是那么陌生!这里是我在网上搜集到得些资料大家可以先了解下:

http://www.cnblogs.com/ibillguo/archive/2009/04/08/1431302.html

http://blogs.neudesic.com/blogs/robert_altland/archive/2009/10/13/130445.aspx

  基本上我们在开始Smooth Streaming的前有些工具是必备否则将无法进行后面工作

  1. IIS 7据我所知在Vista的后Windows操作系统中基本上都支持IIS 7如果你在操作系统“管理工具”中没有发现“Internet Information Services(IIS) Manager”则你需要通过添加Windows Feature来添加它系统环境是Windows 7下面是截图

2010-1-8 14-15-25
 

2010-1-8 14-16-56
 

2010-1-8 14-26-50
  IIS 7安装在Vista和Windows 2008上可能会有所区别注意在Windows 2008上安装IIS 7需要在服务器管理界面中添加服务器角色来完成

  2. Smooth Streaming插件也就是IIS Media Services 3.0在官方站点上有下载在页面右上角Download Extension部分下载或安装Smooth Streaming注意32位机器和64位机器版本区别如果你选择“Using the Microsoft Web Platform Installer”进行安装则会先在IIS 7中安装Web Platform Installer然后通过它在线安装Smooth Streaming安装成功后需要重新打开IIS 7管理界面点击站点右边功能视图中会多出来个Media Services分类下面会多出来 3个插件分别是Bit Rate ThrottlingLive Smooth StreamingSmooth Streaming

2010-1-8 14-39-46
  这里我已经安装过IIS Media Services 3.0所以在Web Platform Installer中选择和安装IIS Media Services 3.0选项都被灰掉了另外通过Web Platform Installer你还可以安装许多其它IIS 7插件它本身也是IIS 7个插件安装的后会出现在IIS 7管理界面Management分类中如本文开始截图中

  除了通过Web Platform Installer安装Smooth Streaming外你还可以直接下载安装包进行安装下载后Smooth Streaming插件是个msi包叫IISMedia32.msi(64位版本应该叫IISMedia64.msi)

  3. Microsoft Expression Encoder 3其实Encoder 2也完全可以不过我个人推荐使用Encoder 3这样可以省去你很多麻烦而且功能也更丰富

  4. Visual Studio 2008和Silverlight 3.0这个基本上都是必备如果你是作为个Silverlight开发人员这里就不多说了

  好了准备工作完成后下面就让我们开始体验在Silverlight 3中使用Smooth Streaming吧

 

如何开始?

  我们都知道要想在Silverlight中播放影片需要MediaElementControl控件支持在以往应用中我们只需要给这个Control控件指定个Source属性将本地或远程视频文件(或视频服务)地址告诉MediaElementControl控件就可以了然后我们通过Media Template(这个可以通过Encoder自动生成或完全自定义)中按钮、进度条等控制视频播放这个过程是比较简单当然如果你想做些很酷效果可能就要费掉周折了

  要想通过Smooth Streaming播放影片对影片格式是有要求这就是我们为什么需要Microsoft Expression Encoder原因通过Encoder我们可以将视频源文件转换成Smooth Streaming所支持文件格式这个步骤在上面我给出两篇文章中都有详细介绍(见“需要些什么”那节)其实我也是参考了其中内容这里我再简单做下介绍吧

  打开Encoder导入要转换视频文件选择右边Encoder面板将Output Format选择为IIS Smooth Streaming

2010-1-8 15-10-17
  然后你还可以做些其它设置如在Clip面板中设置影片起止时间Audio设置(模式、比特率、声道等)展开Video节点你还可以在其中增减Smooth Streaming需要影片副本数量这些影片副本将各自对应于个客户端带宽范围   2010-1-8 15-12-47
  最好在Output面板中设置输出模板这样Encoder在转换完视频后会自动按照你所选择模板生成个Silverlight举例以播放转换后视频其中自动生成xap文件我们在后面会用到注意输出路径转换完成后我们需要到这个目录下拷贝相应文件 2010-1-8 15-20-05
  转换时间视你所选择影片文件大小而定般情况下都会比较长所以你可能需要有点耐心了转换完成后转到Encoder输出目录如果你没有修改这个路径它应该会在“我文档-Expression”下面如下图这是在我机器上转换结果: 2010-1-8 15-24-29
  按照你在Encoder中设定视频文件被转换成按带宽范围所命名文件并且以.ismv作为后缀另外还有个ism文件和个ismc文件这两个文件都是xml文件可以用记事本将它们打开你会看到其实都是些配置信息ism文件是服务器解析文件用于描述在硬盘上区别码率文件的间关系而ismc文件是客户端解析文件它用来决定给客户端下载哪个码率解释性文件其中包括描述可用码率视频、采用什么解码器、视频分辨率等等我们不用太去研究这两个文件究竟是如何回事它们都是Smooth Streaming使用我们在用Encoder转换视频时选择了输出Template所以Encoder还为我们生成了预览要用些文件如Default.html、MediaPlayerTemplate.xap、SmoothStreaming.xap等其中SmoothStreaming.xap文件中就有我们要用东西稍后再来介绍   另外为了能够快速演示Smooth Streaming我们可以直接下载并安装IIS Smooth Streaming Player Development Kit它会提供演示要用xap文件也页面 

 

创建站点

  当然了要让Smooth Streaming能工作我们需要在服务器上架设个Smooth Streaming站点很简单!首先将前面Encoder转换文件中全部ismv文件以及ism、ismc文件复制到你要创建网站WebSite物理目录下按照官方网站WebSite向导上介绍(你可以去官方网站WebSite上下载pdf或doc向导文档不过都是英文)共有两种Smooth Streaming方案可供选择打开IIS 7点击我们所创建站点在右边功能视图Media Services分类下会看到Live Smooth Streaming和Smooth Streaming两个插件事实上它们就是向导上所说Serving _disibledevent=>


  首先视频文件发布在Encoder中可以通过WebDAV完成但是这个需要在IIS上配置权限和认证比较麻烦我们可以通过手动将转换文件复制到网站WebSite下(仅仅就是复制而已没有别)

  然后就是发布Smooth Streaming了

  先说说发布Live Smooth Streaming在IIS中打开Live Smooth Streaming点击“Add”在弹出窗口中输入你想要创建Live Smooth Streaming文件名字并选择Live Source Type为Push其它选项如Title、Estimated duration等都可以完全不用填写

2010-1-8 15-47-14
  确定后在右边Actions中点击Start Publishing Po就OK了这时在网站WebSite物理目录下会生成个你所命名isml文件还记得的前你下载IIS Smooth Streaming Player Development Kit吗?现在将它安装后全部文件复制到你网站WebSite根目录下共是5个文件事实上有用就3个Default.html、pushencoder.exe、SmoothStreamingSamplePlayer.xap 2010-1-8 15-58-40
  然后切换到Windowscommand方式下并且转到网站WebSite所在目录执行下面命令: pushencoder <url-of-publishingpo> <ism-file>

  如图在我机器上执行过程是这样:

2010-1-8 16-07-42
  你可能要稍微等会儿命令执行过程需要点时间定要等命令完全执行完成好了现在打开浏览器输入你站点地址然后后面跟上/LiveSmoothStream.isml/manest你会看到Live Smooth Streaming服务器解析文件已经生成好了 2010-1-8 16-12-12
  好了基本上已经成功了当你看到上面这个画面时表示你Live Smooth Streaming已经架设成功了接下来就是在Default.html文件中设置播放地址让影片播放起来用记事本打开Default.html找到SilverlightControl控件mediaSource属性将后面地址修改为“http://localhost:77/livesmoothstream.isml/manest”注意“localhost:77”是我机器上网站WebSite地址可能跟你“livesmoothstreaming.isml”为你创建Live Smooth Streaming服务器解析文件名称现在你应该可以在浏览器中看到你所发布影片了我们直接使用了IIS Smooth Streaming Player Development Kit提供播放器所以我们只需要修改地址就能直接播放影片在这个播放器中你会看到随着客户端带宽变化影片质量也会发生改变这正是Live Smooth Streaming所提供功能  2010-1-8 16-17-40
  恩我不知道你是不是也跟我样成功架设好了站点如果你没有成功那你可能就要再仔细检查检查了也许哪个环节出了问题如果你也可以观看到影片那么恭喜你你已经学会了如何发布Live Smooth Streaming了还记得我在前面说Live Smooth Streaming是“实时平滑流媒体”吗?不错这种方式可以在线提供实时视频播放但是存在个问题当我们重启IIS时(最糟糕是当我们重启机器时)我们需要重新发布isml解析文件也就是通过pushencoder命令重新生成isml文件内容我不太清楚为什么非要这么做但这样确实带来不少麻烦下面我们看看Smooth Streaming(按需平滑流媒体)吧

  这个就比较简单了不需要在IIS上创建任何文件我们只需要将Default.html文件中Silverlight Source属性指定为这个地址就行了“http://localhost:77/livesmoothstream.isml/manest”同样根据需要你可能要修改“localhost:77”和“FAM2_Ballmer_Client_6MB.ism”现在你同样可以在浏览器中看到影片基本上没有区别不过这种方式不是实时

 

打造自己Smooth Streaming播放器

  上面我们都是用IIS Smooth Streaming Player Development Kit提供播放器做演示如果你Silverlight工程中已经有了个播放器你如何才能让它播放Smooth Streaming提供视频流呢?也许你觉得直接将MediaElementControl控件Source属性指向上面我们介绍那个地址就可以了但事实上我试过了这样行不通看来需要在代码方面做些改动确实如此这里有些资料可供参考:

http://www.marcuswhitworth.com/2009/09/creating-a-custom-silverlight-3-smooth-streaming-player/

http://forums.silverlight.net/forums/p/121952/298008.aspx

http://chris.59north.com/post/Playing-Smooth-Streaming-videos-in-Silverlight.aspx

http://blogs.neudesic.com/blogs/robert_altland/archive/2009/10/13/130445.aspx

  其实也不是很麻烦但有些准备工作要做首先你需要在你Silverlight工程中使用AdaptiveStreamingSource对象而这个对象在Silverlight 3.0标准类库中是不存在如何办呢?还记得前面我让你将Encoder生成文件中xap文件复制到网站WebSite根目录中吗?那个SmoothStreamingSamplePlayer.xap现在有用了将这个文件后缀改为zip(事实上xap文件就是个压缩包)打开它看到了吧?里面包含了我们要用两个类库PlugInMssCtrl.dll和SmoothStreaming.dll将它们引用到你Silverlight工程中

  好了现在你可以放心大胆地修改你Silverlight代码了下面是我给出例子你应该不难看懂!

<UserControl x:Class="SmoothStreamingTest.MainPage"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d
="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable
="d" d:DesignWidth="640" d:DesignHeight="480">
 
<Grid x:Name="LayoutRoot">
   
<MediaElement x:Name="mediaElement" Loaded="mediaElement_Loaded"/>
   
</Grid> </UserControl>

 

using .Windows.Controls; using .Windows.Documents; using .Windows.Input; using .Windows.Media; using .Windows.Media.Animation; using .Windows.Shapes; using Microsoft.Expression.Encoder.AdaptiveStreaming;
SmoothStreamingTest
{
   
public partial  MainPage : UserControl
    {
       
private  uriString = "http://172.18.0.67:77/FAM2_Ballmer_Client_6MB.ism/manest";
       
private AdaptiveStreamingSource MainSrc =  AdaptiveStreamingSource;

       
public MainPage
        {
            InitializeComponent;

            MainSrc.MediaElement
= mediaElement;
            MainSrc.ManestUrl
=  Uri(uriString);
        }

       
private void mediaElement_Loaded(object sender, RoutedEventArgs e)
        {
            MainSrc.StartPlayback;
        }
    }
}


   我们构造个AdaptiveStreamingSource对象将它ManestUrl属性指向我们Smooth Streaming发布地址并将它MediaElement属性指向MediaElementControl控件例子然后通过它StartPlayback思路方法就可以播放视频了是不是很简单呢?但有个问题你需要注意那就是平常我们在Visual Studio中可以直接启动并调试Silverlight工程如果你将影片地址指向Smooth Streaming发布地址这时你在Visual Sutdio中调试时候是看不到影片而必须将网站WebSite发布到IIS上才可以这个我也觉得很奇怪明明接收请求只是Smooth Streaming影片发布站点和请求站点应该没有关系啊但是必须这么做你才能看到影片

 

跨域访问问题

  这里还有个问题如果你站点发布地址和Smooth Streaming发布地址不是个站点或者说不在同台Server上Smooth Streaming请求会失败其实这个并不是Smooth Streaming本身问题这个是Silverlight所带来问题如果你有遇到这样问题可以在Smooth Streaming发布站点物理根目录下创建个名为clientaccesspolicy.xml文件在其中写入下列内容:

<?xml version="1.0" encoding="utf-8"?> <access-policy>
 
<cross-do-access>
   
<policy>
     
<allow-from http-request-headers="*">
       
<do uri="http://v-jaxu:77"/>
     
</allow-from>
     
<grant-to>
       
<resource path="/" -subpaths="true"/>
     
</grant-to>
   
</policy>
 
</cross-do-access> </access-policy>

   do节点uri确定了哪些请求站点被允许访问资源可以重复添加多个区别do节点这个是解决Silverlight跨域访问资源个解决办法

 

个小收获

  做.net开发人应该都或多或少地使用过Reflector这个反编译工具这是个非常棒.net反编译工具能够几乎百分百地还原源代码并且它还支持些插件可以扩展功能现在又有了个可以反编译Silverlight插件SilverlightBrowser也许很多朋友早就听说过它了不过我在这里还是想提有需要朋友可以在本文结尾提供链接下载方便研究和学习Silverlight

下载SilverlightBrowser后解压出来共是两个文件个dll个config打开Reflector点击“ViewAdd-Ins...”在弹出对话框中点击“Add”选择SilverlightBrowser解压后dll文件SilverlightBrowser插件即被安装到Reflector中了现在我们来看看如何使用SilverlightBrowser

在Reflector中选择Tools下Browse Silverlight Page右面打开Silverlight Browser窗口需要我们打开个url地址当然这个地址应当包含Silverlight点击GoSilverlight Browser窗口将预览其中Silverlight同时反编译xap包中资源和代码如下图

2010-1-8 17-16-17
  当然我们也可以手动去反编译类库中对象展开集节点下Resources节点并点击其中节点你可以查看并复制xaml文件这是这个插件比较出色它除了可以反编译xap包中dll还同时可以反编译xaml代码如果运用得当你完全可以复原整个Silverlight工程  

结语

  Smooth Streaming技术出现时间不算太长但作为IIS 7个插件它很好地扩展了Media Services功能使得我们在Silverlight上做平滑视频播放流变得十分简单了同时在将旧版本Silverlight移植到支持Smooth Streaming技术过程中也只需要做少量改动大大减轻了开发工作量还是很值得推广和应用

 

SilverlightBrowser插件下载

标签:
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: