我正在编写一个应用程序来处理网络摄像头。我必须使用(这是一个外部约束)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,但在我连接网络摄像头之前它不显示视频源对话框。
最佳答案
这是旧版 API(Windows 视频,avicap32.dll),它并不像您期望的那么灵活。但仍然受到支持。
具有最佳覆盖范围的较新 API 是 DirectShow,它是 native 的,但使用 DirectShow.NET,您可以连接到 .NET。查看介绍此方法的代码示例和文章:Finding Your Web Cam with C# & DirectShow.NET
编辑:原始文章已不存在,但在互联网文件馆中找到了副本 https://archive.org/web/
关于c# - 如何获取avicap32.dll中已连接的网络摄像头列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13058161/