源读取器

源读取器是使用 媒体会话 和Microsoft媒体基础管道处理媒体数据的替代方法。

为什么使用源读取器?

Media Foundation 提供一个针对播放进行优化的管道。 管道是端到端管道,这意味着它将处理从源(如视频文件)到目标(如图形显示)的数据流。 但是,如果要在管道中读取或修改数据,则必须编写自定义插件。 这需要对媒体基础管道有相当深入的了解。 对于某些任务,创建新插件会产生过多的开销。 如果想要从源获取原始数据,而无需整个管道的开销,则源读取器专为此类情况而设计。

在内部,源读取器持有指向媒体源的指针。 媒体源 是媒体基础对象,它从外部源(例如媒体文件或视频捕获设备)生成媒体数据。 源读取器管理对媒体源的所有方法调用。 (有关媒体源的详细信息,请参阅 媒体源。)

如果媒体源提供压缩的数据,则可以使用源读取器对数据进行解码。 在这种情况下,源读取器将加载正确的解码器并管理媒体源和解码器之间的数据流。 源阅读器还可以执行一些有限的视频处理:从 YUV 到 RGB-32 的颜色转换,以及软件反交错,尽管不建议将这些作用于实时视频呈现。 下图说明了此过程。

源读取器关系图

源读取器不会将数据发送到目标;由应用程序决定使用数据。 例如,源阅读器可以读取视频文件,但它不会将视频呈现到屏幕。 此外,源阅读器不管理演示文稿时钟、处理计时问题或将视频与音频同步。

请考虑在以下情况下使用源读取器:

  • 你希望从媒体文件获取数据,而无需担心基础文件结构。
  • 你想要从音频或视频捕获设备获取数据。
  • 数据处理任务不区分时间,或者不需要演示时钟。
  • 你已有一个不基于媒体基础的媒体管道,并且想要将媒体基础媒体源合并到自己的管道中。

在以下情况下,不建议使用源读取器:

  • 对于受保护的内容。 源读取器不支持数字权限管理(DRM)。
  • 如果关心基础文件结构的详细信息。 源读取器隐藏该类型的详细信息。

在本部分中

主题 描述
使用源读取器处理媒体数据
本主题介绍如何使用源读取器处理媒体数据。
在异步模式下使用源读取器
本主题介绍如何在异步模式下使用源读取器。
教程:解码音频
本教程演示如何使用源读取器从媒体文件解码音频并将音频写入 WAVE 文件。

 

Media Foundation 体系结构

媒体基础编程指南

IMFSourceReader