Wie Hardwaregeräte in den Filtergraphen mitwirken
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
In diesem Artikel wird beschrieben, wie DirectShow mit Audio- und Videohardware interagiert.
Wrapperfilter
Alle DirectShow-Filter sind Softwarekomponenten im Benutzermodus. Damit ein Hardwaregerät im Kernelmodus, z. B. eine Videoaufnahme Karte, einem DirectShow-Filterdiagramm beitreten kann, muss das Gerät als Benutzermodusfilter dargestellt werden. Diese Funktion wird von speziellen Wrapperfiltern ausgeführt, die mit DirectShow bereitgestellt werden. Zu diesen Filtern gehören der Filter "Audioaufnahme" , der VFW-Aufnahmefilter , der TV-Tuner-Filter , der TV-Audiofilter und der Filter "Analog Video Crossbar" . DirectShow stellt auch einen Filter namens KsProxy bereit, der jeden Typ von WdM-Streaminggerät (Windows Driver Model) darstellen kann. Hardwareanbieter können KsProxy erweitern, um benutzerdefinierte Funktionen zu unterstützen, indem sie ein Ksproxy-Plug-In bereitstellen, bei dem es sich um ein com-Objekt handelt, das von KsProxy aggregiert wird.
Die Wrapperfilter machen COM-Schnittstellen verfügbar, die die Funktionen des Geräts darstellen. Die Anwendung verwendet diese Schnittstellen, um Informationen an und aus dem Filter zu übergeben. Der Filter übersetzt die AUFRUFe der COM-Methode in Gerätetreiberaufrufe, übergibt diese Informationen im Kernelmodus an den Treiber und übersetzt das Ergebnis dann wieder an die Anwendung. Die Filter TV Tuner, TV Audio, Analog Video Crossbar und KsProxy unterstützen benutzerdefinierte Treibereigenschaften über die IKsPropertySet-Schnittstelle . Der VFW-Aufnahmefilter und der Audioaufnahmefilter sind auf diese Weise nicht erweiterbar.
Für Anwendungsentwickler ermöglichen Wrapperfiltern der Anwendung die Steuerung von Geräten genauso wie alle anderen DirectShow-Filter. Es ist keine spezielle Programmierung erforderlich; die Details der Kommunikation mit dem Kernelmodusgerät werden im Filter gekapselt.
Video für Windows-Geräte
Der VFW Capture-Filter unterstützt frühere Video für Windows (VfW)-Aufnahmekarten. Wenn ein VfW-Karte auf dem Zielsystem vorhanden ist, kann er mithilfe des DirectShow-Systemgeräte-Enumerators ermittelt und dem Filterdiagramm hinzugefügt werden. Weitere Informationen finden Sie unter Auflisten von Geräten und Filtern.
Audioaufnahme- und Mischgeräte (Soundkarten)
Neuere Soundkarten verfügen über Eingabebuchsen für Mikrofone und andere Gerätetypen. In der Regel verfügen diese Karten auch über On-Board-Mischfunktionen zum Steuern von Lautstärke, Höhen und Bass der einzelnen Eingaben. In DirectShow werden die Eingänge und der Mixer der Sound-Karte vom Filter Audio Capture umschlossen. Jeder Sound Karte kann mit dem Systemgeräte-Enumerator ermittelt werden. Um die Soundkarten in Ihrem System anzuzeigen, führen Sie GraphEdit aus, und wählen Sie aus der Kategorie Audioaufnahmequellen aus. Jeder Filter in dieser Kategorie ist ein separater instance des Audioaufnahmefilters. (Siehe Verwenden von GraphEdit.)
WDM-Streaminggeräte
Neuere Hardwaredecoder und Aufnahmekarten entsprechen der WdM-Spezifikation (Windows Driver Model). Diese Geräte verfügen über eine größere Funktionalität als VfW-Geräte. WDM-Videoaufnahmekarten können Features unterstützen, die unter VfW nicht verfügbar sind, einschließlich der Enumeration von Aufnahmeformaten, der programmgesteuerten Steuerung von Videoparametern wie Farbton und Helligkeit, programmgesteuerte Eingabeauswahl und TV-Tuner-Unterstützung.
Zur Unterstützung von WDM-Streaminggeräten stellt DirectShow den KsProxy-Filter (ksproxy.ax) bereit. KsProxy wurde als "Schweizer Taschenmesserfilter" bezeichnet, weil es so viele verschiedene Dinge macht. Die Anzahl der Pins für den Filter und die Anzahl der COM-Schnittstellen, die vom Filter verfügbar gemacht werden, hängen von den Funktionen des zugrunde liegenden Treibers ab. KsProxy wird im Filterdiagramm nicht unter dem Namen "KsProxy" angezeigt. Es wird immer der Anzeigename des Geräts verwendet, der sich in der Registrierung befindet. Um die WDM-Geräte auf Ihrem System anzuzeigen, führen Sie GraphEdit aus, und wählen Sie eine der WDM-Streamingkategorien aus. Selbst wenn Sie nur eine WDM-Karte auf Ihrem System haben, kann diese Karte mehr als ein Gerät enthalten. Jedes Gerät wird als separater Filter dargestellt, und jeder dieser Filter ist tatsächlich KsProxy.
Eine Anwendung verwendet den Systemgeräteenumerator, um WDM-Gerätemoniker auf dem System zu finden. KsProxy wird instanziiert, indem BindToObject für den Moniker aufgerufen wird. Da KsProxy alle Arten von WDM-Geräten darstellen kann, muss er den Treiber abfragen, um zu bestimmen, welche Eigenschaftensätze der Treiber unterstützt. Eigenschaftensätze sind Sammlungen von Datenstrukturen, die von WDM-Treibern und auch von einigen Benutzermodusfiltern wie MPEG-2-Softwaredecodern verwendet werden. KsProxy konfiguriert sich selbst, um die COM-Schnittstellen verfügbar zu machen, die diesen Eigenschaftensätzen entsprechen. KsProxy übersetzt die COM-Methodenaufrufe in Eigenschaftssätze und sendet diese an den Treiber. Hardwareanbieter können KsProxy erweitern, indem sie Plug-Ins bereitstellen, bei denen es sich um herstellerspezifische Schnittstellen handelt, die die besonderen Funktionen eines Geräts verfügbar machen. Alle diese Details werden in der Anwendung ausgeblendet. Die Anwendung steuert das Gerät über KsProxy, auf die gleiche Weise wie jeder andere DirectShow-Filter.
Kernelstreaming
WDM-Geräte unterstützen Kernelstreaming, bei dem Daten vollständig im Kernelmodus gestreamt werden, ohne jemals in den Benutzermodus zu wechseln. Der Wechsel zwischen Kernelmodus und Benutzermodus ist rechenintensiv; Kernelstreaming ermöglicht hohe Bitraten, ohne die Host-CPU zu belasten. WDM-basierte Filter können Kernelstreaming verwenden, um Multimediadaten direkt von einem Hardwaregerät an ein anderes zu übergeben, entweder auf demselben Karte oder auf einem anderen Karte, ohne die Daten in den Standard Arbeitsspeicher des Systems zu kopieren.
Aus Der Sicht einer Anwendung scheint es, als ob die Daten von einem Benutzermodusfilter zum nächsten verschoben würden. In Wirklichkeit werden die Daten möglicherweise nie in den Benutzermodus übergehen, sondern stattdessen direkt von einem Kernelmodusgerät auf ein anderes gestreamt, bis sie in den Videografiken Karte gerendert werden. Einige Szenarien, z. B. die Erfassung in einer Datei, erfordern, dass die Daten irgendwann vom Kernelmodus in den Benutzermodus übergeben werden. Dieser Schalter erfordert jedoch nicht unbedingt, dass die Daten an einen neuen Speicherort im Arbeitsspeicher kopiert werden.
Anwendungsentwickler müssen sich in der Regel nicht mit den Details des Kernelstreamings befassen, außer als Hintergrundinformationen. Ausführlichere Informationen zu WDM, Kernelstreaming, KsProxy und verwandten Themen finden Sie im Microsoft DDK.
Zugehörige Themen