源读取器

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

为什么使用源读取器?

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

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

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

diagram of the source reader

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

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

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

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

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

在本节中

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

 

Media Foundation 体系结构

Media Foundation 编程指南

IMFSourceReader