2

我在 C# 项目中使用 DShowNET,我一直在尝试多张卡。我尝试访问的卡是 GV-800_4A,它是 GeoVision CCTV 软件通常使用的采集卡。

问题是它在设备管理器中被识别为“DVR 设备”,其 guid 与我一直使用的普通视频输入设备不同,我不知道 DShowNET guid,但相信它可能与这个 guid 有关。

我的问题是“如何将 Windows 设备管理器的设备属性中看到的“设备类 guid”转换为DirectShow 中使用的 Guid?或者这些甚至是平等的?

设备管理器中的 GUID

  • GeoVision GV-800A {4d36e96c-e325-11ce-bfc1-0123456789ab}
  • 圆刚 {4d36e96c-e325-11ce-bfc1-08002be10318}
  • 炫USB {4d36e96c-e325-11ce-bfc1-08002be10318}

DShowLib 中的 GUID

  • 视频输入设备(0x860BB310、0x5D01、0x11d0、0xBD、0x3B、0x00、0xA0、0xC9、0x11、0xCE、0x86)

编辑

基本上,最终目标是能够将其作为捕获过滤器连接到图形以保存 FilterCategory.VideoInputDevice,但现在此设备(GeoVision)不会出现在可用捕获设备列表中,但它只是一个捕获设备驱动程序将其识别为“DVR 设备”

我通过将 CLSID 传递给 DShowNET 函数来使用 CLSID,以返回该类型的可用设备的 ArrayList:

DsDev.GetDevicesOfCat(FilterCategory.VideoInputDevice, out m_capDevices)

我需要知道 CLSID_[** DVR Device **] 或从哪里获得它。我认为它可以派生自“设备类 guid”,但有人告诉我这是不可能的。

4

1 回答 1

0

你可以使用这样的东西:

    const string CAPTURE = "•GeoVision GV-800A";
    s_CaptureDevices = BuildDeviceList(FilterCategory.AMKSCapture, CAPTURE);

    private static List<DsDevice> BuildDeviceList(Guid category, string name)
    {
        var list = new List<DsDevice>();
        DsDevice[] devices = DsDevice.GetDevicesOfCat(category);
        for (int i = 0; i < devices.Length; i++)
        {
            if (!string.IsNullOrEmpty(devices[i].Name) && devices[i].Name.Equals(name))
            {
                list.Add(devices[i]);
            }
        }
        return list;
    }

另一种选择是使用GraphEditPlus并将捕获过滤器添加到图形中。然后,您可以使用如下代码找到 GUID 以直接创建过滤器对象:

var captureFilter = (IBaseFilter) Activator.CreateInstance(Type.GetTypeFromCLSID(new DsGuid("...guid...")));
于 2011-02-17T23:48:57.783 回答