访问未在设备管理器中显示为成像设备的“网络摄像头”
本文关键字:网络 摄像头 成像 网络摄像头 显示 管理器 访问 | 更新日期: 2023-09-27 18:35:15
我有一些使用 Directshow.Net 库的代码(Winforms,C#,.Net 4)。 我现在遇到了 2 次问题,其中设备具有"网络摄像头",但它没有在设备管理器中显示为成像设备,而是显示为其他设备。 当这种情况发生时,DirectShow.Net 要么无法识别它,要么识别它足以使用它,但是如果我尝试捕获视频,它就会爆炸。 最近一次发生在运行Windows 10的Microsoft Surface Pro 4上。 有人对此有任何想法吗? 为什么会发生这种情况或如何解决它? 硬件接口不是我的专长,这是我唯一处理直接硬件接口的产品代码。
答案可以是 VB 或 C#(或任何其他语言)。
谢谢
编辑:我相信错误发生在这行代码(来自 DirectShow.Net 库中),完整的函数调用进一步向下:
hr = m_VidControl.SetMode(m_pinStill, VideoControlFlags.Trigger);
我无法确定这一点,因为我无法访问在具有实际上不是网络摄像头的网络摄像头的设备上进行开发
返回的错误是
System.Runtime.InteropServices.COMException (0x80070032): The request is not supported.
at DirectShowLib.DsError.ThrowExceptionForHR(Int32 hr)
完整功能代码:
public IntPtr Click()
{
int hr;
// get ready to wait for new image
m_PictureReady.Reset();
m_ipBuffer = Marshal.AllocCoTaskMem(Math.Abs(m_stride) * m_videoHeight);
try
{
m_WantOne = true;
// If we are using a still pin, ask for a picture
if (m_VidControl != null)
{
// Tell the camera to send an image
hr = m_VidControl.SetMode(m_pinStill, VideoControlFlags.Trigger);
DsError.ThrowExceptionForHR(hr);
}
// Start waiting
if (!m_PictureReady.WaitOne(9000, false))
{
throw new Exception("Timeout waiting to get picture");
}
}
catch
{
Marshal.FreeCoTaskMem(m_ipBuffer);
m_ipBuffer = IntPtr.Zero;
throw;
}
// Got one
return m_ipBuffer;
}
事实证明,问题确实出在我的代码的不同部分。 我使用了 DirectShow.Net 页面中关于连接到网络摄像头的示例,它正在寻找凸轮上的静止引脚。 我没有报告过一个静止销钉正常工作,所以我把它注释掉了。 然后他们会继续使用发球台做所有事情。 这些摄像头报告了静止和预览图钉,我没有正确设置。 我只是取下了销钉,并将 T 恤用于所有事情。