Freigeben über


Übersicht über die Grapherstellung

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

Um ein Filterdiagramm zu erstellen, erstellen Sie zunächst eine instance des Filter graph-Managers:

IGraphBuilder* pIGB;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
    NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
    (void **)&pIGB);

Der Filter Graph Manager unterstützt die folgenden Methoden zum Erstellen von Diagrammen:

  • IFilterGraph::ConnectDirect versucht, eine direkte Verbindung zwischen zwei Pins herzustellen. Wenn die Pins keine Verbindung herstellen können, schlägt die Methode fehl.
  • IGraphBuilder::Connect verbindet zwei Pins. Wenn möglich, wird eine Direktverbindung hergestellt. Andernfalls werden Zwischenfilter verwendet, um die Verbindung abzuschließen.
  • IGraphBuilder::Render beginnt mit einem Ausgabepin und erstellt den Rest des Graphen. Diese Methoden fügen nach Bedarf Filter hinzu, die nachgelagert werden, bis sie einen Rendererfilter erreichen.
  • IGraphBuilder::RenderFile erstellt ein vollständiges Diagramm zur Dateiwiedergabe.
  • IFilterGraph::AddFilter fügt dem Diagramm einen Filter hinzu. Der Filter wird nicht verbunden. Sie müssen den Filter erstellen, bevor Sie diese Methode aufrufen, entweder durch Aufrufen von CoCreateInstance oder mithilfe der Filterzuordnung oder des Systemgeräte-Enumerators.

Diese Methoden bieten drei grundlegende Ansätze zum Erstellen des Diagramms:

  1. Der Filter Graph-Manager erstellt das gesamte Diagramm.
  2. Der Filter Graph-Manager erstellt einen Teil des Graphen.
  3. Die Anwendung erstellt das gesamte Diagramm.

Der Filtergraph-Manager erstellt das gesamte Diagramm.

Wenn Sie einfach eine Datei wiedergeben möchten, die in einem anerkannten Format erstellt wurde, z. B. AVI, MPEG, WAV oder MP3, verwenden Sie die RenderFile-Methode . Der Artikel How To Play a File (Wiedergeben einer Datei ) veranschaulicht, wie dies geschieht.

Die RenderFile-Methode sucht zunächst in der Registrierung nach einem Quellfilter, der die Datei analysieren kann. Es verwendet das Protokoll (z. B. " https:// in der URL), die Dateierweiterung oder vordefinierte Bytemuster in der Datei, um den Quellfilter zu bestimmen. Ausführliche Informationen finden Sie unter Registrieren eines benutzerdefinierten Dateityps.

Um den Rest des Graphen zu erstellen, verwendet der Filter graph Manager einen iterativen Prozess, bei dem er die Medientypen übernimmt, die ein Filter für seine Ausgabepins unterstützt, und durchsucht die Registrierung nach Filtern, die diesen Medientyp als Eingabe akzeptieren. Es werden mehrere Kriterien verwendet, um die Such- und Priorisierungsfilter einzugrenzen:

  • Die Filterkategorie identifiziert die allgemeine Funktionalität des Filters.
  • Der Medientyp beschreibt, welche Art von Daten der Filter als Eingabe akzeptieren oder als Ausgabe übermitteln kann.
  • Der Wert bestimmt die Reihenfolge, in der Filter ausprobiert werden. Wenn zwei Filter in derselben Filterkategorie beide dieselben Eingabetypen unterstützen, wählt der Filtergraph-Manager den Filter mit dem höchsten Wert aus. Einige Filter erhalten absichtlich einen niedrigen Wert, da sie für spezielle Zwecke konzipiert sind und nur von der Anwendung dem Diagramm hinzugefügt werden sollten.

Der Filter Graph-Manager verwendet das Filter Mapper-Objekt , um die Registrierung zu durchsuchen.

Wenn jeder Filter hinzugefügt wird, versucht der Filtergraph-Manager, ihn mit dem Ausgabepin des vorherigen Filters zu verbinden. Die Filter verhandeln, um zu bestimmen, ob sie eine Verbindung herstellen können und wenn ja, welcher Medientyp für die Verbindung verwendet werden soll. Wenn der neue Filter keine Verbindung herstellen kann, verwirft der Filtergraph-Manager ihn und versucht einen anderen Filter. Dieser Prozess wird fortgesetzt, bis jeder Stream gerendert wird.

Der Filter Graph-Manager erstellt einen Teil des Graphen.

Um etwas zu tun, das über die einfache Wiedergabe einer Datei hinausgeht, muss Ihre Anwendung mindestens einen Teil der Grafikerstellungsarbeiten ausführen. Beispielsweise muss eine Videoaufnahmeanwendung einen Erfassungsquellenfilter auswählen und dem Diagramm hinzufügen. Wenn Sie Daten in eine AVI-Datei schreiben, müssen Sie dem Diagramm die Filter AVI Mux und File Writer hinzufügen. Es ist jedoch häufig möglich, den Graphen-Manager vom Filterdiagramm-Manager abschließen zu lassen. Sie können beispielsweise eine Anheftung für die Vorschau rendern, indem Sie die Render-Methode aufrufen.

Die Anwendung erstellt das gesamte Diagramm

In einigen Szenarien muss Ihre Anwendung das Diagramm möglicherweise erstellen, indem sie jeden Filter hinzufügen und verbinden. In diesem Fall wissen Sie wahrscheinlich speziell, welche Filter dem Diagramm hinzugefügt werden sollten. Bei diesem Ansatz fügt die Anwendung jeden Filter durch Aufrufen von AddFilter hinzu, listet die Pins für die Filter auf und stellt eine Verbindung her, indem entweder Connect oder ConnectDirect aufgerufen wird.

Erstellen von Graphen mit dem Capture Graph Builder

Auflisten von Geräten und Filtern

Auflisten von Objekten in einem Filterdiagramm

Allgemeine Graph-Building Techniken

Erstellen des Filterdiagramms