源读取者

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

为何使用源读取器?

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

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

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

源读取器示意图

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

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

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

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

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

在本节中

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

 

Media Foundation 体系结构

媒体基础编程指南

IMFSourceReader