Freigeben über


DirectShow-Videoaufnahmefilter

[Das dieser Seite zugeordnete Feature DirectShow-ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngineund Audio/Video Capture in Media Foundationersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code MediaPlayer-, IMFMediaEngine und Audio-/Videoaufnahme in Media Foundation anstelle von DirectShow-verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]

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

Kategorien anheften

Ein Aufnahmefilter verfügt häufig über zwei oder mehr Ausgabe-Pins, die die gleiche Art von Daten liefern, z. B. eine Vorschau-Pin und einen Aufnahme-Pin. Daher sind Medientypen keine gute Möglichkeit, die Pins zu unterscheiden. Stattdessen unterscheiden sich die Pins durch ihre Funktionalität, die mithilfe einer GUID identifiziert wird, die als Pinkategoriebezeichnet wird.

Eine Erläuterung zum Abfragen von Pins für ihre Kategorie finden Sie unter Arbeiten mit Pinkategorien. Für die meisten Anwendungen müssen Sie jedoch keine Pins direkt abfragen. Stattdessen verwenden verschiedene ICaptureGraphBuilder2- Methoden Parameter, die die Pinkategorie angeben, auf der ausgeführt werden soll. Der Capture Graph Builder sucht automatisch den richtigen Pin.

Vorschau von Pins und Erfassen von Pins

Einige Videoaufnahmegeräte verfügen über separate Ausgabe-Pins für die Vorschau und Aufnahme. Die Vorschau-Pin wird verwendet, um Video auf dem Bildschirm zu rendern, während die Aufnahmenadel verwendet wird, um Video in eine Datei zu schreiben.

Eine Vorschau-Pin und ein Aufnahme-Pin weisen die folgenden Unterschiede auf:

  • Ein Vorschau-Pin legt frames nach Bedarf ab, um den Durchsatz auf dem Aufnahme-Pin aufrechtzuerhalten.
  • Jeder Frame einer Aufnahmenadel ist zeitstempelt mit der Datenstromzeit, zu der der Frame erfasst wurde. Eine Vorschau-Pin stellt keinen Zeitstempel für die bereitgestellten Beispiele bereit.

Der Grund dafür, dass Vorschauframes keine Zeitstempel aufweisen, besteht darin, dass das Filterdiagramm eine geringe Latenz in den Datenstrom einführt. Wenn die Aufnahmezeit als Präsentationszeit verwendet wird, behandelt der Videorenderer jedes Beispiel etwas verspätet. Dies kann dazu führen, dass der Videorenderer Frames abgibt, während er versucht, nachzuholen. Durch das Entfernen der Zeitstempel wird sichergestellt, dass der Renderer jedes Beispiel anzeigt, wenn es eingeht, ohne Frames ablegen zu müssen.

Die Pinkategorie für Vorschau-Pins ist PIN_CATEGORY_PREVIEW. Die Kategorie für Aufnahme-Pins ist PIN_CATEGORY_CAPTURE.

Videoport-Pins

Ein Videoport ist eine Hardwareverbindung zwischen einem Videogerät (z. B. einem analogen TV-Tuner) und der Grafikkarte. Mit einem Videoport kann das Gerät Videodaten direkt an die Grafikkarte senden. Das Video wird mithilfe einer Hardwareüberlagerung auf dem Bildschirm angezeigt. Ein Videoanschluss kann ein tatsächliches Kabel sein, das zwei Geräte auf separaten Karten verbindet; oder es kann sich um eine kabelgebundene Verbindung auf derselben Karte sein.

Der Vorteil eines Videoports besteht darin, dass das Video direkt in den Videospeicher wechselt, ohne dass die CPU arbeite. 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 Kippen zwischen Frames erfolgt automatisch, wodurch die Synchronisierung des Flips mit anderen Videovorgängen erschwert wird.

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

Jeder Aufnahmefilter verfügt über mindestens einen Aufnahmenadel. Darüber hinaus kann es eine Vorschau-Pin oder einen Videoport-Pin haben, aber nie beide. Filter können über mehrere Aufnahme-Pins und Vorschau-Pins verfügen, wobei jeweils ein separater Medientyp bereitgestellt wird. Daher könnte ein einzelner Filter eine Videoaufnahme-Pin, eine Videovorschau-Pin, eine Audioaufnahme-Pin und eine Audiovorschau-Pin haben. (Es gibt jedoch nichts, was einem Videoport für Audio entspricht.)

Upstream-WDM-Filter

Windows-Treibermodellgeräte (WDM) erfordern möglicherweise einige zusätzliche Filter vor dem Aufnahmefilter. Zu diesen Filtern gehören:

  • TV Tuner Filter. Steuert die Optimierung für analoge TV-Tuner.
  • TV Audio Filter. Steuert Audioeinstellungen für analoge TV-Tuner.
  • Analog Video Crossbar Filter. Leitet Video- und Audiosignale über das Hardwaregerät weiter. Beispielsweise kann ein Gerät mehrere Eingaben haben, z. B. S-Video und zusammengesetztes Video. Mit dem Kreuzleistenfilter kann die Anwendung die Eingabe auswählen.

Obwohl es sich bei diesen filtern um separate Filter in DirectShow handelt, stellen sie in der Regel dasselbe Hardwaregerät dar. Jeder Filter steuert eine andere Funktion des Geräts. Die Filter werden durch Pins verbunden, aber keine Mediendaten werden über die Pinverbindungen verschoben. Daher stellen die Pins für diese Filter keine Verbindung her, indem ein Medientyp hergestellt wird. Stattdessen verwenden sie GUID-Werte, die als Mediumsbezeichnet werden. Mittlere GUIDs werden für einen bestimmten Geräte-Minidriver eindeutig definiert. Der TV-Tuner-Filter und der Videoaufnahmefilter für dieselbe TV-Karte unterstützen beispielsweise dasselbe Medium, mit dem die Anwendung das Diagramm ordnungsgemäß erstellen kann.

Solange Sie ICaptureGraphBuilder2 verwenden, um Ihre Aufnahmediagramme zu erstellen, werden diese Filter automatisch zum Diagramm hinzugefügt. Eine ausführlichere Erläuterung finden Sie unter WDM Class Driver Filters.

Informationen zur Videoaufnahme in DirectShow-