Freigeben über


Intelligent Connect

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

Intelligent Connect ist der Mechanismus, den der Filter Graph-Manager zum Erstellen von Filterdiagrammen verwendet. Sie besteht aus mehreren verwandten Algorithmen, mit denen Filter ausgewählt und dem Filterdiagramm hinzugefügt werden.

Lesen Sie dieses Thema, wenn Sie Probleme beim Erstellen eines bestimmten Filterdiagramms haben und das Problem beheben möchten, oder wenn Sie Ihren eigenen Filter schreiben und es für die automatische Diagrammerstellung 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. Zunächst sucht sie in der Registrierung und stimmt mit dem Protokoll (z. B. https://), der Dateinamenerweiterung oder einer Reihe vordefinierter Bytezu überprüfen, bei denen es sich um Byte handelt, die bestimmte Offsets in der Datei aufweisen, die bestimmten Mustern entsprechen. Ausführliche Informationen finden Sie unter Registrieren eines benutzerdefinierten Dateityps. Wenn die Methode einen geeigneten Quellfilter findet, erstellt sie dann eine Instanz dieses Filters, fügt ihn dem Diagramm hinzu und ruft die IFileSourceFilter::Load-Methode mit dem Dateinamen auf.

IGraphBuilder::Render

Die IGraphBuilder::Render-Methode erstellt einen Unterabschnitt eines Diagramms. Es beginnt mit einem nicht verbundenen Ausgabe-Pin und funktioniert nacheinander, und fügt nach Bedarf neue Filter hinzu. Der Startfilter muss bereits im Diagramm enthalten sein. In jedem Schritt sucht die Render-Methode nach einem Filter, der eine Verbindung mit dem vorherigen Filter herstellen kann. Der Datenstrom kann verzweigt werden, wenn ein Verbindungsfilter über mehrere Ausgabe-Pins verfügt. Die Suche wird beendet, wenn jeder Datenstrom über einen Renderer verfügt. Wenn die Render--Methode hängen bleibt, wird sie möglicherweise gesichert und versuchen Sie es erneut, indem Sie einen anderen Satz von Filtern verwenden.

Zum Verbinden der einzelnen Ausgabestifte führt die Render-Methode die folgenden Aktionen 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 die Bereitstellung dieser Schnittstelle übernimmt der Pin die Verantwortung für das Erstellen des Rests des Diagramms bis zum Renderer. Allerdings unterstützen nur sehr wenige Pins diese Schnittstelle.

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

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

  4. Ab Windows 7 verfügt DirectShow über eine Liste bevorzugter Filter für bestimmte Medienuntertypen. Wenn ein bevorzugter Filter für den medientyp vorhanden ist, der gerendert wird, versucht der Filterdiagramm-Manager 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 Beendigung 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 der Ausgabenadel mit medientypen abzugleichen, die in der Registrierung aufgeführt sind.

    Jeder Filter wird mit einem Verdienstregistriert, ein numerischer Wert, der angibt, wie bevorzugt der Filter ist, relativ zu anderen Filtern. Die EnumMatchingFilters- Methode gibt Filter in der Gewünschten Reihenfolge zurück, mit einem Mindestverwert von MERIT_DO_NOT_USE + 1. Es ignoriert Filter mit einem Vorteil von MERIT_DO_NOT_USE oder weniger. Filter werden auch in Kategorien gruppiert, die durch GUID definiert werden. Kategorien selbst haben Verdienste, und die EnumMatchingFilters Methode ignoriert jede Kategorie mit einem Verdienst 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 in dieser 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 Beendigung des Prozesses verworfen.

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

  1. Verwenden Sie IStreamBuilder-.
  2. Versuchen Sie zwischengespeicherte Filter.
  3. Probieren Sie Filter im Diagramm aus.
  4. Windows 7 oder höher: Probieren Sie ggf. den bevorzugten Filter für den Medientyp aus.
  5. Nachschlagen von Filtern 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 Diagramms zu erstellen.

IGraphBuilder::Connect

Die IGraphBuilder::Connect-Methode verbindet eine Ausgabenadel mit einem Eingabestift. Diese Methode fügt bei Bedarf Zwischenfilter hinzu, wobei eine Variation des algorithmus verwendet wird, der für die methode Render beschrieben wird:

  1. Versuchen Sie eine direkte Verbindung zwischen den Filtern ohne Zwischenfilter.
  2. Versuchen Sie zwischengespeicherte Filter.
  3. Probieren Sie Filter im Diagramm aus.
  4. Windows 7 oder höher: Probieren Sie ggf. den bevorzugten Filter für den Medientyp aus.
  5. Nachschlagen von Filtern in der Registrierung.

Filterkategorien

Merit

Simulieren des Graph-Gebäudes mit GraphEdit-

Erstellen des Filterdiagramms