DirectShow GUID отсутствует для устройства DVR - PullRequest
2 голосов
/ 19 ноября 2010

Я использую DShowNET в проекте C #, и я пробовал несколько карт.Карта, к которой я пытаюсь получить доступ, - это GV-800_4A, которая является картой захвата, обычно используемой программным обеспечением GeoVision CCTV.

Проблема в том, что она распознается в диспетчере устройств как «устройство DVR» с другимguid, чем обычные устройства ввода видео, которые я использую , и я НЕ знаю руководство DShowNET, но полагаю, что это может относиться к этому руководству.

Мой вопрос: «Как мне преобразовать 'Guid класса устройства' видели в свойствах устройства диспетчер устройств Windows для Guid, используемого в DirectShow?или они даже равны? '

GUID в диспетчере устройств

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

GUID в DShowLib

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

РЕДАКТИРОВАТЬ

В основном конечная цель состоит в том, чтобы иметь возможность подключить это как фильтр захвата к графу длясохраните FilterCatergory.VideoInputDevice, но теперь это устройство (GeoVision) НЕ появляется в списке доступных устройств захвата, но оно является устройством захвата, просто драйверы распознают его как «устройство DVR»

Я использую CLSID, передавая его в функцию DShowNET для возврата ArrayList доступных устройств этого типа:

DsDev.GetDevicesOfCat(FilterCategory.VideoInputDevice, out m_capDevices)

Мне нужно знать CLSID _ [** Устройство DVR **] или где его взять.Я думал, что это может быть получено из «Руководства по классу устройства», но мне говорят, что это невозможно.

1 Ответ

0 голосов
/ 18 февраля 2011

Вы можете использовать что-то вроде этого:

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