2010-11-19 4 views
2

C# 프로젝트에서 DShowNET을 사용하고 있으며 여러 장의 카드를 사용해 왔습니다. 내가 접속하려고하는 카드는 GV-800_4A이며 GeoVision CCTV 소프트웨어가 일반적으로 사용하는 캡처 카드입니다.DVR 장치의 DirectShow GUID가 누락되었습니다.

문제는 장치 관리자에서 을 사용하고있는 일반 비디오 입력 장치와 다른 GUID가있는 'DVR 장치'로 인식되며 DShowNET GUID를 모르지만 관련이 있다고 생각됩니다. 이 guid.

내 질문은 GUID의 Windows 장치 관리자의 DirectShow에서 사용되는 장치 속성에서 본 장치 클래스 GUID ''어떻게이 를 변환합니까 '인가? 또는 이것들은 심지어 동등한가? ' 장치 관리자

GUID를

  • GeoVision GV-800A {4d36e96c-E325-11CE-bfc1-ab
  • }
  • 애버 {4d36e96c-E325-11CE-BFC1-08002BE10318}
  • 현혹의 USB{4d36e96c-E325-11CE-BFC1-08002BE10318}
  • ,

GUID DShowLib에

  • VideoInputDevice (0x860BB310, 0x5D01, 0x11d0, 0xBD, 0x3B, 0x00으로, 내지 0xA0, 0xC9, 하게 0x11 0xCE,에는 0x86)

EDIT

기본적으로 최종 목표는 캡처 필터로 그래프에 연결하는 것입니다. 단지 드라이버는 'DVR 장치'

나는 CLSID를 사용으로 인식 FilterCatergory.VideoInputDevice을 저장,하지만 지금은이 장치 (GeoVision) 사용할 캡처 장치 목록에 표시되지 않지만, 캡처 장치입니다 해당 유형의 사용 가능한 장치의 ArrayList를 반환하기위한 DShowNET 기능으로 전달하여 :

DsDev.GetDevicesOfCat(FilterCategory.VideoInputDevice, out m_capDevices)

을 나는 CLSID를 알아야 _ [** DVR 장치 **] 또는 곳을 얻을 수 있습니다. 나는 그것이 'Device class guid'에서 파생 될 수 있다고 생각했지만 이것이 가능하지 않다고 말하고있다. GraphEditPlus를 사용

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

또 다른 옵션이 될 것와 그래프로 캡처 필터를 추가 :

+0

DirectShow.net의 Guid를 사용하여 무엇을하려고합니까? 그게 우리가 필요한 GUID를 찾는 데 도움이 될 것입니다. –

답변

0

이 같은 것을 사용할 수 있습니다. 그런 다음 GUID를 찾아서 다음과 같은 코드를 사용하여 직접 필터 객체를 만들 수 있습니다.

var captureFilter = (IBaseFilter) Activator.CreateInstance(Type.GetTypeFromCLSID(new DsGuid("...guid...")));