2

我正在编写一个应用程序来处理网络摄像头。我必须使用(这是一个外部约束)avicap32.dll 库。所以我在这里,使用这个库中的一些外部函数(我必须编组类型),以及 user32(发送 WindowsMessages)。我挖了一半的互联网,但找不到如何获取所有连接的网络摄像头设备的列表?

当然,我完全了解功能:

[DllImport(avicap32dll)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool capGetDriverDescription(
    short driverIndex,
    StringBuilder name, int nameSize,
    StringBuilder version, int versionSize);

,但它给了我驱动程序列表,而不是凸轮!当我将两台相机连接到我的电脑时,我仍然可以通过此功能找到一个捕获驱动程序(检查 driverIndex 从 0 到 9)。它们都必须使用相同的捕获驱动程序。因此,如果没有网络摄像头列表,我无法真正决定要连接到哪个网络摄像头。有一个 WindowsMessage WM_CAP_DLG_VIDEOSOURCE,但在我连接网络摄像头之前它不显示视频源对话框。

4

2 回答 2

3

这是旧版 API(Windows 视频,avicap32.dll),并没有您想象的那么灵活。不过还是支持的。

具有最佳覆盖率的较新 API 是 DirectShow,它是本机的,但使用 DirectShow.NET,您可以连接到 .NET。查看介绍此方法的代码示例和文章:使用 C# 和 DirectShow.NET 查找您的网络摄像头

编辑:原始文章不再存在,但在 Internet 存档https://archive.org/web/中找到了一份副本

于 2012-10-25T12:51:06.210 回答
1

使用 AForge.NET 库更容易更好。它包含完成这些工作的所有工具http://aforgenet.com/

于 2015-06-09T17:52:10.050 回答