Intelligente Verbindung

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

Intelligent Connect ist der Mechanismus, den der Filter graph-Manager zum Erstellen von Filterdiagrammen verwendet. Es besteht aus mehreren verwandten Algorithmen, die Filter auswählen und dem Filterdiagramm hinzufügen.

Lesen Sie dieses Thema, wenn Sie Probleme beim Erstellen eines bestimmten Filterdiagramms haben und das Problem beheben möchten, oder wenn Sie einen eigenen Filter schreiben und ihn für die automatische Grapherstellung verfügbar machen möchten.

Intelligent Connect umfasst die folgenden IGraphBuilder-Methoden :

IGraphBuilder::AddSourceFilter

Die IGraphBuilder::AddSourceFilter-Methode fügt einen Quellfilter hinzu, der eine angegebene Datei rendern kann. Zuerst wird in der Registrierung gesucht und mit dem Protokoll (z https://. B. ), der Dateinamenerweiterung oder einem Satz vordefinierter Prüfbytes abgeglichen, bei denen es sich um Bytes an bestimmten Offsets in der Datei handelt, die bestimmten Mustern entsprechen. Ausführliche Informationen finden Sie unter Registrieren eines benutzerdefinierten Dateityps. Wenn die Methode einen geeigneten Quellfilter sucht, erstellt sie dann eine instance dieses Filters, fügt ihn dem Diagramm hinzu und ruft die IFileSourceFilter::Load-Methode des Filters mit dem Dateinamen auf.

IGraphBuilder::Render

Die IGraphBuilder::Render-Methode erstellt einen Unterabschnitt eines Graphen. Es beginnt mit einem nicht verbundenen Ausgabepin und arbeitet nachgeschaltet und fügt nach Bedarf neue Filter hinzu. Der Startfilter muss bereits im Diagramm vorhanden sein. Bei jedem Schritt sucht die Render-Methode nach einem Filter, der eine Verbindung mit dem vorherigen Filter herstellen kann. Der Stream kann verzweigt werden, wenn ein Verbindungsfilter über mehrere Ausgabestifte verfügt. Die Suche wird beendet, wenn jeder Stream über einen Renderer verfügt. Wenn die Render-Methode nicht mehr funktioniert, kann es mit einem anderen Satz von Filtern gesichert und erneut versucht werden.

Um die einzelnen Ausgabepins zu verbinden, führt die Render-Methode folgendes aus:

  1. Wenn der Pin die IStreamBuilder-Schnittstelle unterstützt, delegiert der Filter Graph Manager den gesamten Prozess an die IStreamBuilder::Render-Methode des Pins. Durch das Verfügbarmachen dieser Schnittstelle übernimmt der Pin die Verantwortung für die Erstellung des restlichen Graphen bis hin zum Renderer. Diese Schnittstelle wird jedoch von sehr wenigen Pins unterstützt.

  2. Der Filter Graph-Manager versucht, Filter zu verwenden, die ggf. im Arbeitsspeicher zwischengespeichert werden. Während des gesamten Intelligent Connect-Prozesses kann der Filter Graph-Manager Filter aus früheren Schritten zwischenspeichern. (Siehe auch Dynamische Grapherstellung.)

  3. Wenn das Filterdiagramm Filter mit nicht verbundenen Eingabenadeln enthält, versucht der Filter Graph-Manager diese als Nächstes. Sie können erzwingen, dass die Render-Methode einen bestimmten Filter ausprobiert, indem Sie diesen Filter dem Diagramm hinzufügen, bevor Sie Render aufrufen.

  4. Ab Windows 7 verfügt DirectShow über eine Liste der bevorzugten Filter für bestimmte Medienuntertypen. Wenn ein bevorzugter Filter für den Medientyp vorhanden ist, der gerendert wird, versucht der Filter graph-Manager diesen Filter als Nächstes. Eine Anwendung kann die Liste der bevorzugten Filter mithilfe der IAMPluginControl-Schnittstelle ändern. Änderungen an der Liste wirken sich auf den aktuellen Prozess der Anwendung aus und werden nach Abschluss des Prozesses verworfen.

  5. Wenn kein geeigneter Filter gefunden wurde, durchsucht der Filter Graph-Manager die Registrierung mithilfe der IFilterMapper2::EnumMatchingFilters-Methode . Es versucht, die bevorzugten Medientypen des Ausgabenadels mit den in der Registrierung aufgeführten Medientypen abzugleichen.

    Jeder Filter wird mit einem Wert registriert, einem numerischen Wert, der angibt, wie bevorzugt der Filter im Vergleich zu anderen Filtern ist. Die EnumMatchingFilters-Methode gibt Filter in der Reihenfolge des Verdienstes mit einem Mindestwert von MERIT_DO_NOT_USE + 1 zurück. Filter mit einem Vorteil von MERIT_DO_NOT_USE oder weniger werden ignoriert. Filter werden auch in Kategorien gruppiert, die durch GUID definiert werden. Kategorien selbst haben Einen Vorteil, und die EnumMatchingFilters-Methode ignoriert jede Kategorie mit einem Wert von MERIT_DO_NOT_USE oder weniger, auch wenn die Filter in dieser Kategorie höhere Verdienstwerte aufweisen.

    Ab Windows 7 verfügt DirectShow über eine Liste blockierter Filter für bestimmte Medienuntertypen. Der Filter Graph-Manager überspringt Filter für diese Liste. Eine Anwendung kann die Liste der blockierten Filter mithilfe der IAMPluginControl-Schnittstelle ändern. Änderungen an dieser Liste wirken sich auf den aktuellen Prozess der Anwendung aus und werden nach Abschluss des Prozesses verworfen.

Zusammenfassend versucht die Render-Methode Filter in der folgenden Reihenfolge:

  1. Verwenden Sie IStreamBuilder.
  2. Versuchen Sie zwischengespeicherte Filter.
  3. Testen Sie Filter im Diagramm.
  4. Windows 7 oder höher: Versuchen Sie den bevorzugten Filter für den Medientyp, falls vorhanden.
  5. Suchen Sie Filter in der Registrierung.

IGraphBuilder::RenderFile

Die IGraphBuilder::RenderFile-Methode erstellt ein Standardwiedergabediagramm aus einem Dateinamen. Intern verwendet diese Methode AddSourceFilter , um den richtigen Quellfilter zu suchen, und Render , um den Rest des Graphen zu erstellen.

IGraphBuilder::Connect

Die IGraphBuilder::Connect-Methode verbindet einen Ausgabepin mit einem Eingabenadel. Diese Methode fügt bei Bedarf Zwischenfilter mithilfe einer Variation des für die Render-Methode beschriebenen Algorithmus hinzu:

  1. Versuchen Sie eine direkte Verbindung zwischen den Filtern ohne Zwischenfilter.
  2. Versuchen Sie zwischengespeicherte Filter.
  3. Testen Sie Filter im Diagramm.
  4. Windows 7 oder höher: Versuchen Sie den bevorzugten Filter für den Medientyp, falls vorhanden.
  5. Suchen Sie Filter in der Registrierung.

Kategorien filtern

Verdienst

Simulieren der Grapherstellung mit GraphEdit

Erstellen des Filterdiagramms