DVR设备缺少DirectShow GUID

时间:2010-11-19 13:38:27

标签: c# visual-studio-2010 guid video-capture directshow.net

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

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

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

设备管理器中的GUID

  • GeoVision GV-800A {4d36e96c-e325-11ce-bfc1-0123456789ab}
  • AVerMedia {4d36e96c-e325-11ce-bfc1-08002be10318}
  • Dazzle USB {4d36e96c-e325-11ce-bfc1-08002be10318}

DShowLib中的GUID

  • VideoInputDevice(0x860BB310,0x5D01, 0x11d0,0xBD,0x3B,0x00,0xA0,0xC9, 0x11,0xCE,0x86)

修改

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

我使用CLSID将其传递到DShowNET函数,以返回该类型的可用设备的ArrayList:

DsDev.GetDevicesOfCat(FilterCategory.VideoInputDevice, out m_capDevices)

我需要知道CLSID _ [** DVR设备 **]或者去哪里。我认为它可能来自'Device class guid',但我被告知这是不可能的。

1 个答案:

答案 0 :(得分: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...")));