使用 Microsoft Media Platform (MMPPF) 增强 Silverlight 中的媒体体验






4.55/5 (7投票s)
Microsoft 提供的 Microsoft Media Platform Player Framework (MMPPF) 是一个开源的播放器框架及其实现。
引言
当 Silverlight 推出时,由于其处理丰富媒体的能力,它被视为一个播放器框架。它是最早处理真正的 720p 和 1080p 高清媒体的技术之一。从 Silverlight 1 到 Silverlight 5 的发展,数字媒体体验得到了极大的提升。在这篇文章中,我们将深入探讨媒体概念及其与 Silverlight 的集成,以及可用的各种选项。
本文将重点介绍 Microsoft 的 Microsoft Media Platform Framework,这是一个开源的播放器框架及其实现。
媒体、流媒体、Silverlight……迄今为止的历程
Silverlight 1 推出了 MediaElement
对象,以实现丰富的媒体体验。MediaElement
是一个控件区域,可以渲染音频和视频文件。它支持 Windows Media Video (WMV)、Windows Media Audio (WMA) 和 MP3 文件/容器。支持的格式和协议的详细列表可以在此链接中找到:支持的媒体格式、协议和日志字段。MediaElement
对象支持通过 HTTP 将媒体内容下载和流式传输到客户端。除了这些指定的容器类型,Silverlight 还提供了 MediaStreamSource
选项,使您能够提供不属于受支持容器类型的媒体。
除了格式,媒体渲染的另一个重要方面是内容将如何交付到客户端。这就是所谓的交付方法。有各种内容交付方法,如流媒体、渐进式下载、平滑流媒体等。MediaElement
根据文件格式类型和 URI 决定交付方法。
MediaElement
的默认交付行为是渐进式下载。如果您将 MediaElement
与以 http: 或 https: 开头的 URL 结合使用,Silverlight 将开始渐进式下载。如果您将 MediaElement
与以 mms: 开头的 URL 结合使用,Silverlight 将尝试流式传输,如果流式传输失败则回退到渐进式下载。请注意,MediaElement
不支持平滑流媒体。
在继续之前,让我们快速了解一下各种交付方法及其比较。
渐进式下载 | 流媒体(传统) | 平滑流媒体或自适应流媒体 |
简单 HTTP 下载文件 | 基于 HTTP 但有状态(不完全是 HTTP,而是 HTTP 的修改版本) | HTTP 流媒体与文件块下载的混合组合 |
将文件块下载到客户端系统,用户可以访问已下载的内容 | 媒体作为一系列数据包发送到客户端 | 媒体源被分成许多短片段并进行编码。块下载到客户端并按线性顺序播放。 |
不考虑客户端环境 | 可以有多个文件版本,并且根据客户端环境,我们可以决定发送哪个版本 | 根据 CPU 和带宽使用情况,更改流媒体质量级别 |
用户可以在已下载的部分之间导航 | 用户可以向前/向后搜寻音轨 | 平滑搜寻 |
比流媒体更长的初始播放时间 | 快速启动,无缓冲 |
如果您想详细了解以上主题,请查看 Microsoft 门户上发布的白皮书。
在直播流媒体和点播视频时代,平滑流媒体应运而生,它能在给定的网络和客户端环境中提供最佳效果。这使我们能够使用基于 Microsoft Media Platform 的播放器,该播放器能够在客户端识别源内容并启用平滑流媒体。
Microsoft Media Platform: Player Framework 2.5
Microsoft Media Platform (MMPPF) 是 Microsoft 的一个开源项目,支持平滑流媒体、渐进式下载和 Windows Media 流媒体等媒体插件。
这是否足以使用 MMPPF?为什么应该使用该框架,它提供什么好处?以下列表显示了其当前版本 2.5 中一些值得称赞的突出功能:
- 支持 Windows Phone 和 Silverlight
- 根据您的选择选择媒体插件(平滑流媒体/渐进式下载/WMS)
- 慢动作
- 播放线标记
- 自定义和品牌化
- 日志记录
- 广告支持
- 通过插件进行扩展
- 流媒体图叠加
功能列表的更详细描述可以在这里找到。
IIS 平滑流媒体
请注意,常规流媒体和渐进式下载是默认功能,无需额外努力。平滑流媒体需要将文件存储为不同比特率的块,以便能够流畅地流式传输到客户端。在这里,客户端根据客户端环境选择要下载哪个比特率块。
但是,有时在服务器上管理如此多的文件块可能很困难,这时 IIS 平滑流媒体就派上用场了。借助 IIS 平滑流媒体,文件块是在客户端请求时虚拟创建的,但实际视频存储在磁盘上,每个编码比特率只有一个完整的视频文件。这提供了巨大的文件管理优势。
但是,对于 IIS 平滑流媒体,需要充分配置 IIS 服务器,并且需要对视频文件进行编码。有许多服务器/CDN 提供平滑流媒体服务,但是如果您想配置自己的服务器来支持平滑流媒体,请参考这篇文章。
播放器下载和 CodePlex 源代码
在跳到示例应用程序之前,让我与您分享 CodePlex 上的下载链接和项目。它以 MSI 包的形式提供,可以安装。基本上,它是一组 DLL,可以根据需要引用到项目中。
- 下载安装 – http://smf.codeplex.com/releases/view/63434#DownloadId=222617
- CodePlex 项目 – http://smf.codeplex.com/
创建一个简单的媒体播放器项目
项目设置
您可以下载二进制文件或完整的 MSI 包,它会将 MMPPF 模板添加到项目窗口。一旦您下载了上述二进制文件,您就会发现一组程序集,可以根据场景使用。但是对于一个非常基础的应用程序,我们需要将以下程序集引用到项目中。
一旦您将 Microsoft.SilverlightMediaFramework.Core.dll 拖放到工具箱,SMFPlayer
控件就可以让您直接在页面上使用该控件。(由于该项目以前称为 Silverlight Media Player (SMF),请不要在意控件名称)。
使用此控件时,VS 会包含 xmlns:smf=http://schemas.microsoft.com/smf/2010/xaml/player 命名空间。
<Grid x:Name="LayoutRoot" Background="White">
<smf:SMFPlayer HorizontalAlignment="Stretch" Margin="0"
Name="sMFPlayer" VerticalAlignment="Stretch" />
</Grid>
快速播放媒体源
PlayList
和 PlayListItem
是 MMPPF 的基础。PlayListItem
指的是将添加到媒体播放列表集合中的媒体源对象。每个单独的播放项都可以选择其到客户端的交付模式。以下源显示了从媒体源创建 PlaylistItem
。
//Create a new PlayList Item
PlaylistItem item=new PlaylistItem();
item.MediaSource = new Uri("http://manaspatnaik.com/blog/downloads/Demolishor_WMV_HD.wmv");
item.ThumbSource=new Uri("http://manaspatnaik.com/blog/downloads/demolishor.jpg");
item.DeliveryMethod =
Microsoft.SilverlightMediaFramework.Plugins.Primitives.DeliveryMethods.Streaming;
//Add PlaylistItem to the Media playlist
sMFPlayer.Playlist.Add(item);
sMFPlayer.Play();
出于安全原因或其他原因,它不支持相对于播放列表的源;相反,您可以使用绝对 URI 路径作为媒体项。与视频 URI 相同,它支持音频播放。
播放平滑流媒体
正如我所提到的,基于 IIS 的平滑流媒体需要配置服务器,为了演示,我将使用托管在 playready.directtaps.net 上的示例媒体源。平滑流媒体媒体源带有 .ism 扩展名。直接使用此扩展名将无法播放媒体。相反,您必须使用包含“/Manifest”的完整链接。此清单文件定义了服务器上的媒体轨道、比特率和文件之间的关系。
PlaylistItem item = new PlaylistItem();
item.MediaSource = new Uri("http://playready.directtaps.net/" +
"smoothstreaming/SSWSS720H264/SuperSpeedway_720.ism/Manifest");
item.ThumbSource = new Uri(thumbImgUri);
item.DeliveryMethod =
Microsoft.SilverlightMediaFramework.Plugins.Primitives.DeliveryMethods.AdaptiveStreaming;
//Add PlaylistItem to the Media playlist
sMFPlayer.Playlist.Add(item);
请参阅本文顶部提供的实时链接,了解渐进式下载和 IIS 平滑流媒体之间的区别。
将媒体播放器嵌入到 WordPress 或非 Silverlight 网站中
嵌入平滑流媒体媒体播放器需要 XAP 文件,该文件可以从这里下载。将 XAP 文件包含在您的托管提供商的根目录中,并在新的 WordPress 文章中,切换到 HTML 视图,您可以使用以下代码
<object data="data:application/x-silverlight-2," height="100%"
type="application/x-silverlight-2" width="100%">
<param name="source" value="SmoothStreamingPlayer.xap" />
<param name="minRuntimeVersion" value="4.0.50401.0" />
<param name="autoUpgrade" value="true" />
<param name="InitParams"
value="mediaurl=http://playready.directtaps.net/smoothstreaming/
TTLSS720VC1/To_The_Limit_720.ism/Manifest" />
</object>
如上例所示,这是针对平滑流媒体的,它仅支持 ism 文件,即仅支持 IIS 7 平滑流媒体的媒体源。如果您想托管自己的媒体 URL,则需要一个渐进式媒体播放器,该播放器可以从这里下载。
- 示例嵌入式播放器(平滑流媒体)– 嵌入式播放器。
结束语
媒体播放器框架提供了许多我几乎没有涉及的功能,例如日志记录、分析和插件。MMPPF 非常有前途,是所有媒体渲染活动的一站式解决方案。希望本文能让您全面了解 Silverlight 提供的媒体处理能力。请随时发表您的观点和评论。