Windows Media Format SDK 示例应用程序

[与此页面关联的功能 Windows Media Format 11 SDK 是旧版功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用源读取器和接收器编写器,而不是 Windows Media Format 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

随此 SDK 一起提供的示例代码采用适用于 Microsoft Visual Studio 2005 的项目形式。 大多数示例都使用 C++,但 ManagedWMFSDKWrapper 和 ManagedMetadataEdit 需要 C#。

除非安装了 Windows Media Format SDK 或 Windows Player SDK,否则这些示例将不起作用。

每个示例的使用情况信息包含在每个示例目录中的 readme.txt 文件中。

Samle 描述
AudioPlayer 播放 Windows 媒体文件,包括受 DRM 保护的文件。 它通过 GUI 进行控制,命令包括“播放”、“暂停”、“查找”和“停止”。 它可以使用 WMVNetWrite 示例) 播放本地文件或从 Internet (包括这些输出到 Internet 的文件。 注意: 基于 x64 的 Windows 版本不支持此示例的 DRM 部分。
DRMHeader DRMHeader 是一个控制台应用程序,它使用元数据编辑器的 IWMDRMEditor 接口读取文件的 DRM 属性,而无需链接到 DRM 静态库。 注意: 基于 x64 的 Windows 版本不支持此示例。
DRMShow DRMShow 是一个控制台应用程序,它演示如何使用 IWMDRMReader::GetDRMProperty 方法读取 Windows Media 文件的 DRM 属性。此示例演示如何使用 IWMDRMReader::GetDRMProperty 方法和可从 DRM 读取器检索的属性。 它不演示如何获取受 DRM 保护的内容的许可证。 此示例需要构建 DRM 存根库 WMStubDRM.lib。
注意: 基于 x64 的 Windows 版本不支持此示例。
从 Microsoft 获取 WMStubDRM.lib 时,会为库分配应用程序安全级别。 如果收到的库的安全级别不足以播放受保护的文件,此示例将显示错误。
DirectShowInterop/DSCopy 使用 DirectShow WM ASF 编写器筛选器将一个或多个文件转码为 ASF 文件。 输入文件可以是 DirectShow 支持的任何压缩或未压缩格式。
DirectShowInterop/DSPlay 此示例是支持 DRM 的交互式音频/视频媒体文件播放器。 它使用 DirectShow 的 WM ASF 读取器筛选器播放 Windows 媒体文件 (ASF、WMA、WMV) ,而无需 DRM 保护,以及使用 100 或更低级别的 DRM 的文件。 有关详细信息,请参阅示例目录中的 readme.txt。
DirectShowInterop/DSSeekFm 此示例演示如何使用 DirectShow WM ASF 读取器筛选器在 DirectShow 筛选器图中播放 ASF 内容,以及如何使用在 Windows 媒体格式 SDK 中寻求支持的帧。
Managed/WMFSDKWrapper 此托管程序集充当托管代码示例用于访问此 SDK 的某些元数据接口的包装器。
Managed/MetadataEdit 此 C# 应用程序可用于查看和编辑 Windows Media 文件中的元数据。
MetaDataEdit 这是托管元数据编辑应用程序的 C++ 版本。
ReadFromStream 此控制台应用程序示例演示如何使用 WMReader 从 IStream 读取数据。 IStream 源已实现为使用 Windows Media Format (WMA/WMV/ASF) 的文件。 注意: 此示例不演示如何处理来自 WMReader 的媒体示例。 有关如何处理音频/视频或其他类型的媒体示例的示例,请参阅 Windows 媒体格式 SDK 附带的其他示例,例如 AudioPlayer。
UncompAVIToWMV 此控制台应用程序示例演示将 AVI 文件压缩为 WMV 文件所需的代码。 它演示了如何合并多个 AVI 文件中音频和视频流的示例,以及如何将这些示例合并到类似的流中,或者基于源流配置文件创建新流。 它还演示如何创建任意流、执行多通道编码、添加 SMPTE 时间代码以及应用 DRM 版本 1 保护。
WMGenProfile/exe 此示例已从 7.1 版本更新。 它现在是 MFC 对话框应用程序。 WMGenProfile 示例演示如何使用 WMGenProfile 静态库。 它还可用作创建配置文件的工具。 此工具适用于熟悉 Windows 媒体格式的开发人员。 UI 尚未针对用户体验进行测试,也不代表有关如何向用户显示此信息的建议。
WMGenProfile/lib GenProfile 库示例演示配置文件的创建。 它演示如何为各种流类型创建媒体类型和流, (音频、视频、脚本、图像、文件传输和 Web) 。 它不演示如何使用系统配置文件,也不演示如何将系统配置文件转换为指定 Windows Media 音频和视频 9 系列编解码器的配置文件。
WMProp 此控制台应用程序演示如何使用元数据编辑器对象和读取器中的配置文件信息检索属性。
WMStats 此控制台应用程序显示读取器和编写器统计信息。 还可以在一台计算机上同时使用 WMStats 的多个实例。 启动一个实例作为服务器将流发送到网络,然后以客户端身份运行第二个实例,以验证服务器是否正确流式传输。
WMSyncReader 此控制台应用程序示例演示如何使用 IWMSyncReader 读取媒体文件,而无需创建任何额外的线程或使用回调。 实现以下功能:读取压缩或解压缩的示例
基于时间的查找
基于帧的查找
IStream 派生源
WMVAppend 此控制台应用程序采用两个 Windows Media 文件作为输入,并尝试创建一个输出文件,其中包含第一个的内容,后跟第二个。 此示例比较两个输入文件的配置文件,以确保它们足够相似,可以追加。 如果不是这种情况,将显示一条错误消息。 例如,当一个文件仅是音频,第二个文件是音频-视频文件时,或者当两个音频文件具有不同的比特率时,会出现错误消息。该示例接受 VBR) 源 (可变比特率。 但是,在比较两个 VBR 源的配置文件时,样本会忽略平均比特率差异,因为即使两个 VBR 流是使用相同的配置文件创建的,平均比特率也会有所不同。 WMVAppend 无法比较不受约束的基于比特率的 VBR 流的峰值比特率或基于质量的 VBR 流的质量级别,因为源文件中不存在此信息。 因此,用户有责任确保使用同一配置文件创建两个源文件。 否则,可能会创建无效内容。
WMVCopy 此示例演示复制 WMV 文件所需的代码。 它演示如何读取和写入压缩示例、读取标头属性和脚本以及修改标头属性。
WMVNetWrite 此控制台应用程序显示 Windows Media 文件如何通过 Internet 进行流式传输。 此示例需要指定端口,然后可以使用播放器播放文件。
WMVRecompress 此控制台应用程序演示如何重新压缩 WMV 文件。 它演示了读取未压缩的示例、编写未压缩的示例,以及执行多通道编码、多通道输出和智能重新压缩。

关于 Windows 媒体格式 SDK

编程指南