使用异步读取器读取文件
[与此页面关联的功能 Windows Media Format 11 SDK 是旧版功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用源读取器和接收器编写器,而不是 Windows Media Format 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
异步读取器使用多个线程和异步调用从 ASF 文件读取内容。 异步读取器支持的功能非常适合向最终用户呈现内容的应用程序。
读取器对象的最基本的功能可以分解为以下步骤。 在这些步骤中,“应用程序”是指使用 Windows 媒体格式 SDK 编写的程序。
- 应用程序实现 IWMReaderCallback 接口来处理来自读取器的消息。 这包括两种回调方法: OnStatus(接收与读取器各方面的状态相关的消息)和 OnSample(从读取器接收未压缩样本)。
- 应用程序会将要读取的文件的名称传递给读取者。 读取器打开文件时,会为每个流分配一个输出编号。 如果文件使用互斥,则读取器为所有互斥流分配单个输出。
- 应用程序从读取器获取有关各种输出的配置的信息。 收集的信息将使应用程序能够正确呈现媒体示例。
- 应用程序指示读取器开始从文件读取数据。 读取器开始在包装在缓冲区对象的缓冲区中,一次一个地将未压缩的示例传送到 OnSample 回调。 读者提供的示例按演示时间顺序排列。 读取器将继续提供示例,直到应用程序停止或到达文件末尾。
- 应用程序负责在读取器传送数据后呈现数据。 Windows 媒体格式 SDK 不提供任何呈现例程。 通常,应用程序将使用其他 SDK 来呈现数据,例如 Microsoft DirectX® SDK 或 Microsoft Windows 平台 SDK的多媒体功能。
- 读取完成后,应用程序会指示读取器关闭文件。
AudioPlayer 示例应用程序等中演示了这些步骤。 有关详细信息,请参阅 示例应用程序。
读取器还支持更高级的功能。 读取器使你能够执行以下操作:
- 暂停播放文件。
- 检索读取器性能统计信息。
- 控制互斥流的流选择。
- 手动为输出分配缓冲区。
- 提供你自己的时钟。
- 检索文件操作的状态, (缓冲、下载或保存) 。
- 使用标准 COM 接口 IStream 打开文件。
- 查找 ASF 文件中的特定点。
- 从文件的标头读取配置文件数据。
以下各节详细介绍了读取器对象的使用。
- 在 OnStatus 回调中实现读取者消息
- 实现 OnSample 回调
- 创建读取器并打开文件
- 使用异步读取器检索媒体示例
- 使用异步读取器按时间查找
- 使用异步读取器按帧编号查找
- 使用异步读取器按 SMPTE 时间代码查找
- 查找标记
- 暂停或停止播放
- 获取读取器性能统计信息
- 使用手动流选择
- 使用异步读取器传递压缩示例
相关主题