Share via


DirectShow Video Capture Filter

[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.]

Erfassungsfilter in DirectShow verfügen über einige Features, die sie von anderen Arten von Filtern unterscheiden. Obwohl der Capture Graph Builder viele Details ausblendet, empfiehlt es sich, diesen Abschnitt zu lesen, um ein allgemeines Verständnis von DirectShow-Erfassungsgraphen zu erhalten.

Kategorien anheften

Ein Erfassungsfilter verfügt häufig über zwei oder mehr Ausgabepins, die die gleiche Art von Daten liefern– z. B. eine Vorschau- und eine Erfassungspin. Daher sind Medientypen keine gute Möglichkeit, die Pins zu unterscheiden. Stattdessen unterscheiden sich die Pins durch ihre Funktionalität, die mithilfe einer GUID, der sogenannten Pinkategorie, identifiziert wird.

Eine Diskussion darüber, wie Pins für ihre Kategorie abfragt werden, finden Sie unter Arbeiten mit Pinkategorien. Für die meisten Anwendungen müssen Sie Pins jedoch nicht direkt abfragen. Stattdessen verwenden verschiedene ICaptureGraphBuilder2-Methoden Parameter, die die Pinkategorie angeben, für die ausgeführt werden soll. Der Capture Graph Builder sucht automatisch den richtigen Pin.

Vorschaupins und Erfassungspins

Einige Videoaufnahmegeräte verfügen über separate Ausgabepins für Vorschau und Aufzeichnung. Der Vorschaunadel wird verwendet, um Videos auf dem Bildschirm zu rendern, während der Aufnahmepin zum Schreiben von Videos in eine Datei verwendet wird.

Ein Vorschaupin und ein Erfassungspin weisen die folgenden Unterschiede auf:

  • Ein Vorschaupin löscht Frames nach Bedarf, um den Durchsatz für den Erfassungspin zu gewährleisten.
  • Jeder Frame aus einem Erfassungspin wird mit der Datenstromzeit, zu der der Frame erfasst wurde, zeitstempelt. Ein Vorschaunadel zeitstempelt die gelieferten Beispiele nicht.

Der Grund, warum Vorschauframes keine Zeitstempel aufweisen, ist, dass das Filterdiagramm eine geringe Latenz in den Stream einführt. Wenn die Aufzeichnungszeit als Präsentationszeit verwendet wird, behandelt der Videorenderer jedes Beispiel als etwas verspätet. Dies kann dazu führen, dass der Videorenderer Frames fallen lässt, während er versucht, nachzuholen. Durch Entfernen der Zeitstempel wird sichergestellt, dass der Renderer jedes Beispiel beim Eintreffen darstellt, ohne Frames zu löschen.

Die Pinkategorie für Vorschaupins ist PIN_CATEGORY_PREVIEW. Die Kategorie für Erfassungspins ist PIN_CATEGORY_CAPTURE.

Videoport-Pins

Ein Videoport ist eine Hardwareverbindung zwischen einem Videogerät (z. B. einem analogen TV-Tuner) und dem video-Karte. Ein Videoport ermöglicht es dem Gerät, Videodaten direkt an die Grafik Karte zu senden. Das Video wird mithilfe einer Hardwareüberlagerung auf dem Bildschirm angezeigt. Ein Videoport kann ein tatsächliches Kabel sein, das zwei Geräte auf separaten Karten verbindet. oder es kann sich um eine fest verkabelte Verbindung auf demselben Karte.

Der Vorteil eines Videoports ist, dass das Video ohne Cpu-Arbeit direkt in den Videospeicher fließt. Videoports haben jedoch einige Nachteile:

  • Ein Videoport verwendet während der Aufnahme immer die Überlagerungsoberfläche, unabhängig davon, ob Sie eine Vorschau des Videos anzeigen möchten.
  • Das Spiegeln zwischen Frames erfolgt automatisch, was die Synchronisierung des Flips mit anderen Videovorgängen erschwert.

Wenn ein Aufnahmegerät einen Videoport verwendet, verfügt der Aufnahmefilter über einen Videoport-Pin anstelle eines Vorschaupins. Die Pinkategorie für Videoport-Pins ist PIN_CATEGORY_VIDEOPORT.

Jeder Erfassungsfilter verfügt über mindestens einen Erfassungspin. Darüber hinaus kann es einen Vorschau-Pin oder einen Videoport-Pin haben, aber nie beides. Filter können mehrere Erfassungspins und Vorschaupins aufweisen, die jeweils einen separaten Medientyp bereitstellen. Daher könnte ein einzelner Filter einen Videoaufnahmepin, einen Videovorschau-Pin, einen Audioaufnahmepin und eine Audiovorschau-Pin haben. (Es gibt jedoch nichts, das einem Videoport für Audio gleichwertig ist.)

WDM-Upstreamfilter

Windows Driver Model (WDM)-Geräte erfordern möglicherweise zusätzliche Filter Upstream aus dem Erfassungsfilter. Diese Filter umfassen Folgendes:

  • TV-Tunerfilter. Steuert die Optimierung für analoge TV-Tuner.
  • TV-Audiofilter. Steuert die Audioeinstellungen für analoge TV-Tuner.
  • Analoger Video-Querleistenfilter. Leitet Video- und Audiosignale über das Hardwaregerät weiter. Ein Gerät kann beispielsweise über mehrere Eingaben verfügen, z. B. S-Video und Zusammengesetztes Video. Mit dem Kreuzleistenfilter kann die Anwendung die Eingabe auswählen.

Obwohl dies separate Filter in DirectShow sind, stellen sie in der Regel dasselbe Hardwaregerät dar. Jeder Filter steuert eine andere Funktion des Geräts. Die Filter sind durch Pins verbunden, aber keine Mediendaten werden über die Pinverbindungen verschoben. Daher stellen die Pins in diesen Filtern keine Verbindung her, indem sie einen Medientyp einrichten. Stattdessen verwenden sie GUID-Werte, die als Mediums bezeichnet werden. Mittlere GUIDs sind eindeutig für einen bestimmten Geräteminidriver definiert. Beispielsweise unterstützen der TV-Tunerfilter und der Videoaufnahmefilter für dieselbe TV-Karte dasselbe Medium, sodass die Anwendung das Diagramm ordnungsgemäß erstellen kann.

In der Praxis werden diese Filter dem Graphen automatisch hinzugefügt, solange Sie ICaptureGraphBuilder2 zum Erstellen Ihrer Erfassungsdiagramme verwenden. Eine ausführlichere Diskussion finden Sie unter WDM-Klassentreiberfilter.

Informationen zur Videoaufzeichnung in DirectShow