注册筛选器指南

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

筛选器注册表信息确定 Filter Graph Manager 在 Intelligent Connect 期间的工作方式。 因此,它会影响为 DirectShow 编写的每个应用程序,而不仅仅是使用筛选器的应用程序。 应遵循以下准则,确保筛选器的行为正确。

  1. 是否需要注册表中的筛选器数据? 对于许多自定义筛选器,没有理由使筛选器对筛选器映射器或系统设备枚举器可见。 只要注册 DLL,应用程序就可以使用 CoCreateInstance 创建筛选器。 在这种情况下,只需省略工厂模板中的 AMOVIESETUP_FILTER 结构。 (一个缺点是筛选器在 GraphEdit 中不可见。若要解决此问题,可以使用 IFilterMapper2::CreateCategory 方法创建专用的“测试”类别。应仅针对调试版本执行此操作。)

  2. 选择正确的筛选器类别。 默认的“DirectShow 筛选器”类别适用于常规用途筛选器。 在适当的时候,在更具体的类别中注册筛选器。 当 IFilterMapper2 搜索筛选器时,它会忽略其优点为MERIT_DO_NOT_USE或更少的任何类别。 不适合正常播放的类别具有较低的优点。

  3. 避免在引脚AMOVIESETUP_MEDIATYPE信息中指定 MEDIATYPE_None、MEDIASUBTYPE_None或GUID_NULLIFilterMapper2 将这些视为通配符,这可能会减慢图形生成过程。

  4. 选择可能的最低优点值。 下面是一些准则:

    过滤器类型 建议的优点
    默认呈现器 MERIT_PREFERRED。 但是,对于标准媒体类型,自定义呈现器绝不应为默认呈现器。
    非默认呈现器 MERIT_DO_NOT_USE或MERIT_UNLIKELY
    复用函数 MERIT_DO_NOT_USE
    解码器 MERIT_NORMAL
    Spitter, parser MERIT_NORMAL 或更低
    特殊用途筛选器;由应用程序直接创建的任何筛选器 MERIT_DO_NOT_USE
    捕获 MERIT_DO_NOT_USE
    “回退”筛选器;例如, 颜色空间转换器筛选器 MERIT_UNLIKELY

     

    如果为筛选器提供MERIT_DO_NOT_USE的优点,请考虑是否需要首先注册此信息。 (请参阅项 1.)

  5. 请勿在接受 24 位 RGB 的“DirectShow 筛选器”类别中注册筛选器。 筛选器将干扰颜色空间转换器筛选器。

如何注册 DirectShow 筛选器