DirectShow应用程序编程简介

本文介绍DirectShow中使用的基本术语和概念。 阅读本部分后,即可编写第一个DirectShow应用程序。

筛选器和筛选图形

DirectShow的构建基块是一个名为筛选器的软件组件。 筛选器是一个软件组件,用于对多媒体流执行某些操作。 例如,DirectShow筛选器可以

  • 读取文件
  • 从视频捕获设备获取视频
  • 解码各种流格式,例如 MPEG-1 视频
  • 将数据传递到图形或声卡

筛选器接收输入并生成输出。 例如,如果筛选器解码 MPEG-1 视频,则输入为 MPEG 编码流,输出是一系列未压缩的视频帧。

在DirectShow中,应用程序通过将筛选器链连接在一起来执行任何任务,以便一个筛选器的输出成为另一个筛选器的输入。 一组连接的筛选器称为 筛选器图。 例如,下图显示了用于播放 AVI 文件的筛选器图。

filter graph to play an avi file

文件源筛选器从硬盘读取 AVI 文件。 AVI 拆分器筛选器将文件分析为两个流,即压缩的视频流和音频流。 AVI 解压缩器筛选器解码视频帧。 视频呈现器筛选器使用 DirectDraw 或 GDI 将帧绘制到显示器。 默认 DirectSound 设备筛选器使用 DirectSound 播放音频流。

应用程序不必管理所有这些数据流。 筛选器由称为筛选器Graph管理器的高级组件控制。 应用程序进行高级 API 调用,例如“运行” (,以通过图形) 或“停止” (移动数据,以停止数据流) 。 如果需要对流操作进行更多控制,可以直接通过 COM 接口访问筛选器。 筛选器Graph管理器还会将事件通知传递给应用程序。

筛选器Graph管理器还提供了另一个用途:它通过将筛选器连接在一起,为应用程序提供生成筛选器图的方法。 (DirectShow还提供各种帮助程序对象来简化此过程。本文档详细介绍了这些内容。)

编写DirectShow应用程序

从广义上讲,有三个任务DirectShow应用程序必须执行。 下图说明了这些内容。

typical directshow application

  1. 应用程序创建筛选器Graph管理器的实例。
  2. 应用程序使用筛选器Graph管理器生成筛选器图。 图形中的确切筛选器集将取决于应用程序。
  3. 应用程序使用筛选器Graph管理器来控制筛选器图并通过筛选器流式传输数据。 在此过程中,应用程序还将响应来自筛选器Graph管理器的事件。

处理完成后,应用程序将释放筛选器Graph管理器和所有筛选器。

DirectShow基于 COM;筛选器Graph管理器和筛选器都是 COM 对象。 在开始编程DirectShow之前,应大致了解 COM 客户端编程。 许多有关 COM 编程的书籍都可用。

若要开始DirectShow,请阅读文章“如何播放文件”,其中提供了一个简单的控制台应用程序来播放视频文件。 “关于DirectShow”部分更详细地介绍了DirectShow体系结构,而“使用DirectShow”部分将检查DirectShow支持的主要方案,例如捕获、视频编辑、DVD 播放和电视。