DirectShow接口
然而,我们首先需要的是能够以编程方式处理 DirectShow。对于非托管代码,这可能是立即可行的,因为 SDK 包含了通过 C++ 访问DirectShow 库所需要的所有头文件。对于托管代码,问题就有些棘手。虽然 Managed DirectX确实包含前面讨论的 AudioVideoPlayback.dll 库,但该库级别很高,它提供 Video 和Audio 级别的抽象,而我们需要的是能够在筛选器和针级别对筛选器图形进行操作。虽然我觉得这个问题将来会得到改善,但至少当前版本的 Managed DirectX 对我们爱莫能助。
quartz.dll 是什么?quartz.dll 的类型库公开了一些我们需要的功能,这里列出所公开接口的完整列表:
接口 | 描述 |
IAMCollection | 筛选器图形对象集合,例如筛选器或针。 |
IAMStats | 允许应用程序从图形管理器中检索性能数据。筛选器可以使用此接口记录性能数据。 |
IBasicAudio | 允许应用程序控制音频流的音量和平衡。 |
IBasicVideo | 允许应用程序设置视频属性,例如目标矩形和源矩形 |
IBasicVideo2 | 从 IBasicVideo 接口派生,为应用程序提供了一个附加方法,通过它可以检索视频流的首选纵横比。 |
IDeferredCommand | 允许应用程序取消或修改该应用程序先前使用 IQueueCommand 接口排入队列的图形-控制命令。 |
IFilterInfo | 管理筛选器的信息并提供访问筛选器和表示筛选器上的针的 IPinInfo 接口。 |
IMediaControl | 提供方法来控制经过筛选器图形的数据流。它包含运行、暂停和停止图形的方法。 |
IMediaEvent | 包含用来检索事件通知和用于重写筛选器图形管理器的默认事件处理的方法。 |
IMediaEventEx | 从 IMediaEvent 派生并添加方法来启用一个应用程序窗口,以便在事件发生时接收消息。 |
IMediaPosition | 包含用于查找流中一个位置的方法。 |
IMediaTypeInfo | 包含用于检索针连接的媒体类型的方法。 |
IPinInfo | 包含用于检索针信息和连接针的方法。 |
IQueueCommand | 允许应用程序预先将图形-控制命令排入队列。 |
IRegFilterInfo | 提供对 Windows 注册表中的筛选器的访问,以及向筛选器图形中添加已注册的筛选器。 |
IVideoWindow | 包含用于设置窗口所有者、窗口的位置和尺寸及其他窗口属性的方法。 |
这确实是个很好的开头,但它没有为我们提供一些处理图形和筛选器的最重要的接口。例如,手动构造图形比较常用的接口之一,IGraphBuilder 接口,并没有包括在内。表示特定筛选器实例和提供对其针访问的IBaseFilter 接口也没有包括在内。下表列出了在本文中要完成图形需要访问的主要接口:
接口 | 描述 |
IBaseFilter | 提供用于控制筛选器的方法。应用程序可以使用此接口枚举针和查询筛选器信息。 |
IConfigAsfWriter2 | 提供用于获取和设置 WM ASF Writer 筛选器写文件要使用的高级流格式(Advanced Streaming Format,ASF)配置文件的方法和用于支持 Windows Media Format 9 Series SDK 中的新功能(例如双向编码和对反交错视频的支持)的方法。 |
IFileSinkFilter | 在将媒体流写入文件的筛选器上实现。 |
IFileSourceFilter | 在从文件读媒体流的筛选器上实现。 |
IGraphBuilder | 提供方法来支持应用程序构建筛选器图形。 |
IMediaControl | 提供方法来控制数据流经筛选器图形的流程。它包括用于运行、暂停和停止图形的方法。 |
IMediaEvent | 包含用于检索事件通知和重写筛选器图形管理器的默认事件处理的方法。 |
IMediaSeeking | 包含用于查询当前位置和查找流中的特定位置的方法。 |
IWmProfileManager | 用于创建配置文件、加载现有的配置文件和保存配置文件。 |