使用异步读取器读取文件

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

异步读取器使用多个线程和异步调用从 ASF 文件读取内容。 异步读取器支持的功能非常适合向最终用户呈现内容的应用程序。

读取器对象的最基本的功能可以分解为以下步骤。 在这些步骤中,“应用程序”是指使用 Windows 媒体格式 SDK 编写的程序。

  1. 应用程序实现 IWMReaderCallback 接口来处理来自读取器的消息。 这包括两种回调方法: OnStatus(接收与读取器各方面的状态相关的消息)和 OnSample(从读取器接收未压缩样本)。
  2. 应用程序会将要读取的文件的名称传递给读取者。 读取器打开文件时,会为每个流分配一个输出编号。 如果文件使用互斥,则读取器为所有互斥流分配单个输出。
  3. 应用程序从读取器获取有关各种输出的配置的信息。 收集的信息将使应用程序能够正确呈现媒体示例。
  4. 应用程序指示读取器开始从文件读取数据。 读取器开始在包装在缓冲区对象的缓冲区中,一次一个地将未压缩的示例传送到 OnSample 回调。 读者提供的示例按演示时间顺序排列。 读取器将继续提供示例,直到应用程序停止或到达文件末尾。
  5. 应用程序负责在读取器传送数据后呈现数据。 Windows 媒体格式 SDK 不提供任何呈现例程。 通常,应用程序将使用其他 SDK 来呈现数据,例如 Microsoft DirectX® SDK 或 Microsoft Windows 平台 SDK的多媒体功能。
  6. 读取完成后,应用程序会指示读取器关闭文件。

AudioPlayer 示例应用程序等中演示了这些步骤。 有关详细信息,请参阅 示例应用程序

读取器还支持更高级的功能。 读取器使你能够执行以下操作:

  • 暂停播放文件。
  • 检索读取器性能统计信息。
  • 控制互斥流的流选择。
  • 手动为输出分配缓冲区。
  • 提供你自己的时钟。
  • 检索文件操作的状态, (缓冲、下载或保存) 。
  • 使用标准 COM 接口 IStream 打开文件。
  • 查找 ASF 文件中的特定点。
  • 从文件的标头读取配置文件数据。

以下各节详细介绍了读取器对象的使用。

读取 ASF 文件

读取器对象