[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayer、IMFMediaEngine和媒体基金会中的 音频/视频捕获取代。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayer、IMFMediaEngine 和 Media Foundation 中的 音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
本文介绍 Microsoft DirectShow 基类库。 此库适用于筛选器开发人员,但应用程序编写器可能会发现某些帮助程序类和调试实用工具很有用。 但是,DirectShow 编程不需要基类库。
以下部分总结了库中最重要的基类。
COM 对象类
以下类支持创建 COM 对象:
| 班级 | DESCRIPTION |
|---|---|
| CBaseObject | 基对象类。 |
| CUnknown | 实现 IUnknown 接口。 |
大多数 DirectShow 类派生自 CBaseObject。 此类通过在运行时统计 DLL 中所有活动对象的数量来提供调试支持。 在调试版本中,当对象计数大于零时,DLL 将断言它被卸载。 这样,可以更轻松地跟踪因引用计数问题而导致的泄漏。
支持 COM 接口的所有基类都派生自 CUnknown,后者继承 CBaseObject。 CUnknown 类支持引用计数、QueryInterface 和聚合。 有关详细信息,请参阅 如何实现 IUnknown。
筛选和锁定类
以下类支持创建 DirectShow 过滤器和引脚对象:
| 班级 | DESCRIPTION |
|---|---|
| CBaseFilter | 筛选器的基类。 实现 IBaseFilter 接口。 |
| CBasePin | 引脚的基类。 实现 IPin 和 IQualityControl 接口。 |
| CBaseInputPin | 使用本地内存传输的输入引脚的基类。 实现 IMemInputPin 接口。 此类派生自 CBasePin。 |
| CBaseOutputPin | 使用 IMemInputPin 连接的输出引脚的基类。 此类派生自 CBasePin。 |
以下类可用于创建更专用的筛选器类型:
| 班级 | DESCRIPTION |
|---|---|
| CSource | 源筛选器的基类。 此类旨在用于创建推送数据源。 它不适合拉取源,例如文件读取器。 若要为此类创建输出引脚,请使用 CSourceStream 类。 |
| CTransformFilter | 变换滤波器的基类。 此类对数据进行拷贝。 此类的引脚为 CTransformInputPin 和 CTransformOutputPin。 |
| CTransInPlaceFilter | 不复制数据的转换筛选器的基类。 此类在将数据传递到下游之前直接对输入数据进行处理。 此类的引脚为 CTransInPlaceInputPin 和 CTransInPlaceOutputPin。 |
| CVideoTransformFilter | 视频转换筛选器的基类。 此类派生自 CTransformFilter ,并添加了对质量控制的支持。 |
| CBaseRenderer | 渲染器过滤器的基类。 此类的输入引脚为 CRendererInputPin。 |
| CBaseVideoRenderer | 视频呈现器的基类。 此类派生自 CBaseRenderer。 |
若要使用这些类,必须派生自己的类并编写代码以支持特定于筛选器的功能。 基类越专用化,在派生类中编写的代码就越少。
辅助对象
以下类实现由筛选器和接口使用的辅助对象。 这些类中的大多数都可以使用,而无需从它们派生新类:
| 班级 | DESCRIPTION |
|---|---|
| CPullPin | 分析器筛选器上输入引脚的辅助对象。 支持与拉取源的 IAsyncReader 连接。 |
| COutputQueue | 用于输出引脚的辅助对象,该引脚将样本排队等待在工作线程上传递。 |
| CSourceSeeking | 用于使用一个输出引脚在源筛选器上实现查找的帮助对象。 (此类不适用于具有多个引脚的筛选器,例如分析程序。) |
| CEnumPins | 用于枚举筛选器上的引脚的枚举器对象。 实现 IEnumPins 接口。 |
| CEnumMediaTypes | 枚举器对象,用于枚举引脚上的首选媒体类型。 实现 IEnumMediaTypes 接口。 |
| CMemAllocator | 内存分配器对象。 实现 IMemAllocator 接口。 |
| CMediaSample | 媒体示例对象。 实现 IMediaSample2 接口。 |
| CBaseReferenceClock | 参考时钟的基类。 实现 IReferenceClock 接口。 |
| CMediaType | 用于操作 AM_MEDIA_TYPE 结构的辅助对象。 |