标题：WindowsMediaPlayerSDK
摘要
了解如何更改 Windows Media Player 的外观和行为，如何将其嵌入基于 Web 或基于 Windows 的应用程序，以及如何使用插件对象扩展其功能。本文介绍了 Windows Media Player 软件开发工具包 (SDK) 并描述了这些功能的用法。
简介
本文对 SDK 进行了高级概述，涉及如下所述的三个主要功能；本文适用于决策者以及初次接触数字媒体编程的程序员。
可以将 Player 嵌入 Web 应用程序或基于 Microsoft Windows 的应用程序中。Windows Media Player 具有模块化体系结构，使您可以只使用所需的部分。尤其是，用户界面与音频和视频内容的播放功能相互独立。您可以使用其播放功能，并可决定在应用程序中是使用 Player 的现有用户界面，还是创建自己的用户界面。
Windows Media Player 提供了外观功能，您可以使用该功能创建个性化的 Player 外观，也可以基于 Player 创建截然不同的功能。
还可以创建插件来扩展 Player 的主要功能，方法是向用户界面添加新的交互式控件，在 Player 呈现音频或视频数据前对其进行修改，然后在 Windows Media 文件中呈现非标准数据流。
本文包括以下主题：
1、创建 Player 应用程序。介绍如何在 Web 或基于 Windows 的应用程序中嵌入 Windows Media Player 功能。 
2、创建外观。介绍外观功能：更改 Windows Media Player 的外观和行为。 
3、创建插件。介绍修改 Windows Media Player 外观和行为的插件。其中包括呈现专有内容、修改音频或视频播放以及通过交互式控件提供全新的功能。 
创建 Player 应用程序
Windows Media Player 包括用于呈现视频和音频的 Microsoft ActiveX 控件。该控件可在任何运行 Windows Media Player 的计算机上获得。Windows Media Player 是一种独立的技术，此外，它还包括一个 ActiveX 控件形式的组件对象模型 (COM) 服务器（Player 与 ActiveX 控件之间的关系相当于 Microsoft Internet Explorer 与其所提供的 WebBrowser ActiveX 控件之间的关系）。
有两种方法可用于创建使用 Windows Media Player ActiveX 控件的应用程序。您可以在 Web 应用程序中使用该控件，也可以在基于 Windows 的应用程序中使用它。
要在 Web 应用程序中使用 Windows Media Player，应在页面的超文本标记语言 (HTML) 中包含一个 OBJECT 元素。并在 OBJECT 元素中包含嵌套的 PARAM 元素，以指定 Windows Media Player ActiveX 控件是否可见、包含哪些操作按钮以及该控件的其他属性。通过包含多个 OBJECT 元素，可在一个 Web 页面中包含多个控件。要完全控制嵌入的 Player，可以在页面的 HTML 中编写脚本代码。
要在基于 Windows 的应用程序中使用 Windows Media Player，可以包含一个对服务于该控件的动态链接库 (DLL) 的引用。例如，在 Microsoft Visual Basic 中，使用 Components（组件）对话框设置一个对“Windows Media Player”（这是 Wmp.dll 文件中库的助记名称）的引用。
如何设置控件属性取决于所用的编程环境。例如，在 Visual Basic 中，使用自定义 Properties（属性）对话框在设计时设置属性。也可以通过编写代码设置或读取属性以及在运行时调用方法。
最终用户可在任何安装了 Windows Media Player 的基于 Windows 的计算机上运行该应用程序。他们可以通过已经熟悉（或由您创建）的用户界面收听音频或观看视频。
企业程序员可以简单地使用 Player 提供的播放功能，并将精力集中在应用程序的特定业务需要上。
创建外观
您可以使用 Windows Media Player 中的外观技术更改 Player 的外观，同时保持它的标准行为。Player 包含的外观便是该功能的体现。尽管这些外观使 Player 看起来迥然不同，但它们却都保留了 Play（播放）和 Pause（暂停）按钮、显示播放列表、返回到完整模式等基本功能。
您还可以使用外观技术创建一个外观和行为与标准 Player 相差很大的应用程序。您可以随意在外观中添加各种各样的控件，使其执行自定义操作。要定义自定义操作，可以编写 JScript 代码；您无需精通 Microsoft Visual C++ 或 Visual Basic 即可将外观技术用作编程平台。
您可以将外观定义文件、图像文件和任何 Jscript 文件压缩到文件扩展名为 .wmz 的单个文件中。这是将外观提供给最终用户的标准方法。
您还可以创建称作边框的特殊外观，它显示在完整模式下的 Windows Media Player 的 Now Playing（正在播放）功能中。您可以将边框、播放列表文件和数字媒体文件压缩到文件扩展名为 .wmd 的单个可下载文件中。当最终用户单击 .wmd 文件的链接时，Windows Media Player 将对包含的所有文件进行解压缩，将边框应用到 Now Playing（正在播放）功能，然后开始播放在播放列表文件中指定的内容。
这种可下载文件功能尤其适用于向最终用户提供出色的娱乐或教育内容。它不要求最终用户进行任何安装，同时允许您进行广泛的自定义。
创建插件
Windows Media Player SDK 包含支持广泛扩展性的接口。要扩展 Player 的基本功能，可以编写借助于 DLL 文件的 COM 对象。
SDK 包含一个可创建示例插件项目的 Visual C++ 向导。该项目包含编译和注册插件所需的代码和一个示例实现。运行向导后，您便可以将编程工作的重点放在实现插件所需的特定代码上。
利用插件提供的扩展性，您可以将 Windows Media Player 用作提供和操作数字媒体内容的平台。插件有几种不同的类型，将在以下主题中进行讨论。
可视化效果插件
当 Player 处于完整模式或外观模式（取决于外观）时，可视化效果插件可在只播放音频内容时，向 Player 的 Now Playing（正在播放）功能添加有趣的动态图像。可视化效果的外观和动态运动基于正在播放的音乐并与之同步。
将可视化效果作为 COM 对象实现。Player 每秒多次为当前选定的可视化效果引发事件。该事件包含以下数据：
1、TimedLevel 结构，其中包括当前音频的频率和音量信息 
2、设备上下文句柄，用于指定绘图面 
3、RECT 结构，定义绘图面的大小 
在可视化效果对象中，实现处理此事件的 Render 方法。
可以使用 Windows 图形设备接口 (GDI) 功能、Microsoft Direct3D 或 DirectDraw 功能等技术对图形进行可视化编程。
在调用那些利用设备上下文的 GDI 函数时，Windows Media Player 插件向导生成的示例实现使用音频和音量数据（位于 TimedLevel 结构中）。可以修改或替换该实现，以生成所需的可视化效果。
该向导可以编写用于编译自行注册的 COM DLL 的全部代码。要看到可视化效果，只需编译项目，然后运行 Windows Media Player 并选择新的可视化效果即可。
用户界面插件
Windows Media Player 为最终用户提供了各种信息和功能。但是，您可能需要提供自定义交互或自定义数据。使用用户界面插件可完成此项工作。
Windows Media Player 的完整模式由许多区域组成，如 Now Playing（正在播放）功能和播放列表窗格。某些区域在默认状态下不可见，但最终用户可将其显示为可见。这些区域包括显示在 Now Playing（正在播放）功能底部的设置区域，以及显示在播放列表上方的元数据区域。
用户界面插件分五种类型。其中三种类型显示在 Player 的不同区域中。在每个区域中，每次只能启用一个插件。
1、显示插件。这些插件占据 Now Playing（正在播放）功能中的可视化效果显示区域。由于该区域通常很大，因此比较适合显示大量数据或复杂的交互控件集。 
2、设置插件。这些插件位于 Now Playing（正在播放）功能中可视化效果显示区域的下面。该区域包含图形均衡器、视频设置和其他用于配置播放或 Windows Media Player 外观的控件。设置插件比较适合添加相似的自定义功能，并使最终用户能够配置 Player 的外观或行为。 
3、元数据插件。这些插件位于播放列表上方的一个小区域。它们比较适合显示曲目、唱片集或播放列表的确切信息，同时也适用于简单控件或超链接。例如，Windows Media Player 包含一个元数据插件，它显示的封面图形是一个指向有关当前播放的唱片集和音乐家的更多信息的链接。 
有两类用户界面插件在 Windows Media Player 窗口中不显示。
1、窗口插件。这些插件占用一个单独的窗口。它们比较适合显示信息或向最终用户提供从 Now Playing（正在播放）功能切换到其他功能或加载其他插件时始终存在的交互操作。 
2、背景插件。这些插件没有图形界面（除非像对待任何插件那样，为它们提供属性页）。它们比较适合不要求最终用户进行输入的自动服务。 
Windows Media Player 插件向导可以为每种类型的用户界面插件创建示例实现。您可以修改实现细节，以提供所需功能，编译项目，然后使用 Player 测试插件。该向导包括编译自行注册的 COM DLL 所需的所有代码，因而您可以在编码时将重点放在特殊需要上。
DSP 插件
数字信号处理 (DSP) 插件在播放过程中修改数字媒体流。使用 DSP 插件，可以将彩色视频更改为黑白视频，或使用反色使图像看起来像底片。还可在音频中添加颤音或回声效果。插件在处理数字媒体内容时将改变该内容的播放。DSP 插件与可视化效果插件不同，后者接收种子值形式的数字音频数据以生成视觉输出，但并不影响音频播放本身。
除 Windows Media Player SDK 之外，编写 DSP 插件还需要 Microsoft DirectX SDK。这些插件有一个明显特征，即实现由 DirectX SDK 提供的 IMediaObject 接口。
当 DSP 插件安装在最终用户的计算机上并被激活时，Windows Media Player 在数据呈现之前将音频和视频数据传递给该插件。Player 分配输入缓冲区和输出缓冲区，并使插件能够对这两个缓冲区进行访问。必须实现 IMediaObject 接口的各种方法，以便从输入缓冲区读取数据，以适用于插件的任何方式对数据进行处理，然后将修改后的数据写入输出缓冲区。Windows Media Player 将呈现从输出缓冲区获取的数据。
可以运行 Windows Media Player 插件向导创建 DSP 插件的示例实现。该示例实现 IMediaObject 接口，并实现一个称为 DoProcessOutput 的实用程序函数。很多情况下，只需使用 DSP 插件的特有代码修改此实用程序，并利用向导提供的所有其他代码。
呈现插件
使用 Windows Media Format SDK，可以向 Windows Media 文件中添加任何数据流。此数据流的格式不受限制，包括 Windows Media Player 默认情况下无法识别的格式。
有两种方法可用来呈现包含此类数据流的 Windows Media 文件。
1、可以编写一个自定义播放应用程序。这种情况下，除了包含用于呈现您的特有内容的代码之外，还必须包含用于提供标准音频、视频和脚本流的代码以及用于显示用户界面的代码。 
2、也可以为 Windows Media Player 编写一个呈现插件。这种情况下，仍须编写用于呈现您的特有内容的代码，但是可以利用 Player 的固有功能来呈现支持的流并提供最终用户已有所了解的用户界面。 
Windows Media Player 插件向导可以创建用于呈现插件的示例实现。该示例可实现呈现插件所需的许多接口，还可以实现一个称为 DoRendering 的实用程序函数。只需使用用于呈现特有流的代码修改此实用程序，并利用向导提供的所有其他代码。