У меня есть код (Winforms, C#, .Net 4), который использует библиотеку Directshow.Net. Я столкнулся с проблемой 2 раза, когда у устройства есть «веб-камера», но он не отображается в диспетчере устройств в качестве устройства обработки изображений, а как что-то еще. Когда это происходит, DirectShow.Net либо не распознает его, либо распознает его достаточно, чтобы работать с ним, но если я попытаюсь захватить видео, которое он взорвет. Это совсем недавно произошло на Microsoft Surface Pro 4, работающем под Windows 10. У кого-нибудь есть идеи об этом? Почему это происходит или как обойти это? Аппаратный интерфейс не является моей специальностью, и это мой единственный код продукта, который имеет дело с прямым аппаратным интерфейсом.Доступ к веб-камерам, которые не отображаются в диспетчере устройств в качестве устройств формирования изображения
Ответы могут быть в VB или C# (или на любом другом языке).
Благодаря
Edit: Я считаю, что ошибка происходит из этой строки кода (из библиотеки 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;
}