Freigeben über


Informationen zu DirectShow-Filtern

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

DirectShow verwendet eine modulare Architektur, bei der jede Verarbeitungsstufe von einem COM-Objekt namens Filter ausgeführt wird. DirectShow stellt eine Reihe von Standardfiltern für anwendungen bereit, und Entwickler können ihre eigenen benutzerdefinierten Filter schreiben, die die Funktionalität von DirectShow erweitern. Zur Veranschaulichung sind die folgenden Schritte zum Wiedergeben einer AVI-Videodatei sowie die Filter aufgeführt, die die einzelnen Schritte ausführen:

  • Lesen Sie die Rohdaten aus der Datei als Bytestream (Dateiquellenfilter).
  • Untersuchen Sie die AVI-Header, und analysieren Sie den Bytestream in separate Videoframes und Audiobeispiele (AVI Splitter-Filter).
  • Decodieren Sie die Videoframes (je nach Komprimierungsformat verschiedene Decoderfilter).
  • Zeichnen Sie die Videoframes (Videorenderer-Filter).
  • Senden Sie die Audiobeispiele an den Sound Karte (Standardfilter für DirectSound-Geräte).

Diese Filter sind im folgenden Diagramm dargestellt.

Filterdiagramm für die Wiedergabe einer AVI-Datei mit komprimiertem Video

Wie das Diagramm zeigt, ist jeder Filter mit einem oder mehreren anderen Filtern verbunden. Die Verbindungspunkte sind auch COM-Objekte, die als Pins bezeichnet werden. Filter verwenden Pins, um Daten aus einem Filter in den nächsten zu verschieben. Die Pfeile im Diagramm zeigen die Richtung an, in die die Daten verschoben werden. In DirectShow wird eine Gruppe von Filtern als Filterdiagramm bezeichnet.

Filter haben drei mögliche Zustände: ausgeführt, beendet und angehalten. Wenn ein Filter ausgeführt wird, verarbeitet er Mediendaten. Wenn sie beendet wird, wird die Verarbeitung von Daten beendet. Der angehaltene Zustand wird verwendet, um Daten vor der Ausführung anzuzeigen. im Abschnitt Datenfluss im Filterdiagramm wird dieses Konzept ausführlicher beschrieben. Mit sehr seltenen Ausnahmen werden Zustandsänderungen über das gesamte Filterdiagramm koordiniert; alle Filter in den Diagrammschalterzuständen unisono. Daher wird auch das gesamte Filterdiagramm als ausgeführt, beendet oder angehalten.

Filter können in mehrere allgemeine Kategorien unterteilt werden:

  • Ein Quellfilter führt Daten in das Diagramm ein. Die Daten stammen möglicherweise aus einer Datei, einem Netzwerk, einer Kamera oder einem anderen Ort. Jeder Quellfilter verarbeitet einen anderen Typ von Datenquelle.
  • Ein Transformationsfilter übernimmt einen Eingabedatenstrom, verarbeitet die Daten und erstellt einen Ausgabedatenstrom. Encoder und Decoder sind Beispiele für Transformationsfilter.
  • Rendererfilter befinden sich am Ende der Kette. Sie erhalten Daten und präsentieren sie dem Benutzer. Ein Videorenderer zeichnet beispielsweise Videoframes auf dem Display; Ein Audiorenderer sendet Audiodaten an den Sound Karte, und ein Dateischreiberfilter schreibt Daten in eine Datei.
  • Ein Splitterfilter teilt einen Eingabedatenstrom in zwei oder mehr Ausgaben auf, wobei der Eingabedatenstrom in der Regel parallel analysiert wird. Der AVI-Splitter analysiert beispielsweise einen Bytestream in separate Video- und Audiostreams.
  • Ein Mux-Filter nimmt mehrere Eingaben auf und kombiniert diese in einem einzigen Stream. Beispielsweise führt AVI Mux den umgekehrten Vorgang des AVI-Splitters aus. Es nimmt Audio- und Videostreams an und erzeugt einen AVI-formatierten Bytestream.

Die Unterscheidung zwischen diesen Kategorien ist nicht absolut. Der ASF-Leserfilter fungiert beispielsweise sowohl als Quellfilter als auch als Splitterfilter.

Alle DirectShow-Filter machen die IBaseFilter-Schnittstelle verfügbar, und alle Pins machen die IPin-Schnittstelle verfügbar. DirectShow definiert auch viele andere Schnittstellen, die spezifischere Funktionen unterstützen.

Informationen zum Filtergraph-Manager

Datenfluss im Filterdiagramm

DirectShow-Filter