2010-11-19 6 views
2

Ich verwende DShowNET in einem C# -Projekt und ich habe mehrere Karten versucht. Die Karte, auf die ich zugreifen möchte, ist eine GV-800_4A, eine Capture-Karte, die normalerweise von der GeoVision CCTV-Software verwendet wird.DirectShow GUID fehlt für DVR-Gerät

Das Problem ist, dass es in der Gerätemanager als 'DVR-Gerät' mit einer anderen Guid als die normalen Video-Eingabegeräte, die ich verwendet habe und ich kenne nicht die DShowNET GUID, aber glaube, dass es sich beziehen kann diese Anleitung.

Meine Frage lautet: ‚Wie konvertiere ich die ‚Geräteklasse guid‘ in Geräte Eigenschaften der Manager in Directshow verwendet, um die Guid Fenster Gerät gesehen? oder sind diese überhaupt gleichsetzbar?

GUIDs in Gerätemanager

  • GeoVision GV-800A {4d36e96c-E325-11CE-bfc1-ab}
  • 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

Grundsätzlich ist das Endziel in der Lage, dies als Capture-Filter zu einem Graphen zu verbinden sparen FilterCatergory.VideoInputDevice, aber jetzt dieses Gerät (GeoVision) erscheint nicht auf der Liste der verfügbaren Aufnahmegeräte, aber es ist ein Aufnahmegerät nur die Fahrer erkennen ihn als ‚DVR-Gerät‘

Ich verwende die CLSID indem sie in die DShowNET Funktion für die Rückgabe einer Arraylist der verfügbaren Geräte dieser Art vorbei:

DsDev.GetDevicesOfCat(FilterCategory.VideoInputDevice, out m_capDevices)

muss ich die CLSID wissen _ [** DVR-Gerät **] oder wo das bekommen. Ich dachte, es könnte von der "Device Class Guid" abgeleitet werden, aber mir wird gesagt, das ist nicht möglich.

+0

Was versuchen Sie mit dem Guid in directshow.net zu tun? Das würde uns helfen herauszufinden, welches Guid du brauchst. –

Antwort

0

Man könnte so etwas wie folgt verwenden:

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

Eine weitere Option wäre GraphEditPlus verwenden und die Capture-Filter zu einem Diagramm hinzuzufügen. Sie können dann die GUID ermitteln, um das Filterobjekt direkt zu erstellen, indem Sie folgenden Code verwenden:

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