【发布时间】:2012-10-15 00:30:29
【问题描述】:
我正在编写一个应用程序来处理网络摄像头。我必须使用(这是一个外部约束)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);
,但它给了我驱动程序的列表,而不是摄像头!当我将两台相机连接到我的 PC 时,我仍然可以通过此功能找到一个捕获驱动程序(检查 driverIndex 从 0 到 9)。它们都必须使用相同的捕获驱动程序。因此,没有网络摄像头列表,我无法真正决定要连接到哪个摄像头。有一个 WindowsMessage WM_CAP_DLG_VIDEOSOURCE,但在我连接网络摄像头之前它不显示视频源对话框。
【问题讨论】:
-
使用较新的 API,VFW 实在是太老了,一点都不灵活。
-
不幸的是,我绑定到 avicap32.dll 。这是在大学上课的,而且...你知道的。它只是必须是这个dll。为什么?因为。
-
这就是你所拥有的一切。该 API 来自视频捕获设备是高端硬件的时候。您可以枚举驱动程序 0 到 9,并且可能会有针对特定索引的响应。
-
是的。我正在检查所有这 10 个索引,发现只有一个驱动程序,即使 USB 中有 2 个凸轮。这不好。即使,您能否指出一些特定的 API,它应该可以工作?我是说,我已经(虽然我们不能……)改用 WIA2,但我们的摄像头似乎与 WIA2 不兼容。
-
这是较新的 API - Finding Your Web Cam with C# & DirectShow.NET