DVR 设备缺少 DirectShow GUID

发布于 2024-10-03 12:52:33 字数 1178 浏览 5 评论 0原文

我在 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}
  • 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)

编辑

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

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

DsDev.GetDevicesOfCat(FilterCategory.VideoInputDevice, out m_capDevices)

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

I am using DShowNET in a C# project and I have been trying multiple cards. The Card I am trying to access is a GV-800_4A, which is a a capture card normally used by GeoVision CCTV software.

The problem is it is recognized in the device manager as a 'DVR Device' with a different guid than the normal video input devices I have been using and I do NOT know the DShowNET guid, but believe it may relate to this guid.

My question is 'How do I convert the 'Device class guid' seen in devices properties the windows device manager to the Guid used in DirectShow? or are these even equatable?'

GUIDs in device manager

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

GUID in DShowLib

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

EDIT

Basically the end goal is to be able to connect this as a capture filter to a graph to save FilterCatergory.VideoInputDevice, but now this device (GeoVision) does NOT appear on the list of available capture devices, but it IS a capture device just the drivers recognize it as a 'DVR Device'

I use the CLSID by passing it into the DShowNET function for returning an ArrayList of available devices of that type :

DsDev.GetDevicesOfCat(FilterCategory.VideoInputDevice, out m_capDevices)

I need to know the CLSID_[** DVR Device **] or where to get that. I thought it could be derived from the 'Device class guid', but I am getting told this is not possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暮年 2024-10-10 12:52:33

您可以使用如下内容:

    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...")));

You could use something like this:

    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;
    }

Another option would be use GraphEditPlus and add the capture filter to a graph. You can then find out the GUID to create the filter object directly using code like this:

var captureFilter = (IBaseFilter) Activator.CreateInstance(Type.GetTypeFromCLSID(new DsGuid("...guid...")));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文