0

我想知道这里是否有人知道如何枚举计算机当前安装的 DMO 过滤器?我想做一个枚举所有当前安装的 DMO 过滤器的应用程序。

我知道这是可能的,因为 GraphEdit 和 GraphStudio 接下来会这样做。

我需要这个的原因是我在一家每天都会收到很多不同类型的专有 (CCTV) 视频的公司工作。很多时候,给我发视频的人不是一个技术含量很高的人,所以我给他发了一个应用程序,它可以导出所有当前安装的程序和 DirectShow 过滤器(使用“InstalledCodec”),并将它们与我们的程序用来处理的程序进行比较那个视频在他的电脑上,这样我就可以找到编解码器并在我的电脑上处理电影。

现在,我偶尔会收到一个使用 DMO 过滤器处理的视频(通常是 ASF),不幸的是,我找不到枚举它们的方法(至今)。

这里有没有人知道如何解决这个问题?

谢谢你,-YS

4

1 回答 1

1

APIDMOEnum函数正是这样做的:

DMOEnum 函数枚举注册表中列出的 DMO。呼叫者可以按类别、媒体类型或两者进行搜索。

除此之外,Windows SDK 上有DMOEnum 示例:

此示例应用程序枚举用户系统中注册的所有 DirectX 媒体对象 (DMO),并显示有关它们的信息。

该示例使用 DMOEnum 函数和 IEnumDMO 接口来枚举 DMO。它使用 IMediaObject 接口和其他 DMO 接口来检索有关每个 DMO 的信息。

如果您只需要那些可从 DirectShow 访问的 DMO,则可以使用System Device Enumerator和 DMO 类别 GUID 进行枚举:

// 57f2db8b-e6bb-4513-9d43-dcd2a6593125
DEFINE_GUID(DMOCATEGORY_AUDIO_DECODER, 0x57f2db8b,0xe6bb,0x4513,0x9d,0x43,0xdc,0xd2,0xa6,0x59,0x31,0x25);
// 33D9A761-90C8-11d0-BD43-00A0C911CE86
DEFINE_GUID(DMOCATEGORY_AUDIO_ENCODER, 0x33D9A761,0x90C8,0x11d0,0xBD,0x43,0x00,0xA0,0xC9,0x11,0xCE,0x86);
// 4a69b442-28be-4991-969c-b500adf5d8a8
DEFINE_GUID(DMOCATEGORY_VIDEO_DECODER, 0x4a69b442,0x28be,0x4991,0x96,0x9c,0xb5,0x00,0xad,0xf5,0xd8,0xa8);
// 33D9A760-90C8-11d0-BD43-00A0C911CE86
DEFINE_GUID(DMOCATEGORY_VIDEO_ENCODER, 0x33D9A760,0x90C8,0x11d0,0xBD,0x43,0x00,0xA0,0xC9,0x11,0xCE,0x86);
// f3602b3f-0592-48df-a4cd-674721e7ebeb
DEFINE_GUID(DMOCATEGORY_AUDIO_EFFECT, 0xf3602b3f,0x0592,0x48df,0xa4,0xcd,0x67,0x47,0x21,0xe7,0xeb,0xeb);
// d990ee14-776c-4723-be46-3da2f56f10b9
DEFINE_GUID(DMOCATEGORY_VIDEO_EFFECT, 0xd990ee14,0x776c,0x4723,0xbe,0x46,0x3d,0xa2,0xf5,0x6f,0x10,0xb9);
// f665aaba-3e09-4920-aa5f-219811148f09
DEFINE_GUID(DMOCATEGORY_AUDIO_CAPTURE_EFFECT, 0xf665aaba,0x3e09,0x4920,0xaa,0x5f,0x21,0x98,0x11,0x14,0x8f,0x09);
于 2013-06-26T07:38:53.093 回答