Freigeben über


Pullmodell

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

In der IMemInputPin-Schnittstelle bestimmt der Upstream-Filter, welche Daten gesendet werden sollen, und pusht die Daten an den Downstreamfilter. Für einige Filter ist ein Pullmodell besser geeignet. Hier fordert der Downstreamfilter Daten aus dem Upstream Filter an. Die Beispiele werden weiterhin vom Ausgabe- bis zum Eingabenadel nachgelagert, aber der Downstreamfilter initiiert den Datenfluss. Dieser Verbindungstyp verwendet die IAsyncReader-Schnittstelle .

Der typische Einsatz für das Pullmodell ist die Dateiwiedergabe. In einem AVI-Wiedergabegraphen führt der Async File Source-Filter beispielsweise generische Dateilesevorgänge aus und übermittelt die Daten als Bytedatenstrom ohne Formatinformationen. Der AVI Splitter-Filter liest die AVI-Header und analysiert den Stream in Video- und Audiobeispiele. Der AVI-Splitter kann bestimmen, welche Daten besser als der Async File Source-Filter benötigt werden, und verwendet daher IAsyncReader anstelle von IMemInputPin.

Um Daten vom Ausgabepin anzufordern, ruft der Eingabenadel eine der folgenden Methoden auf:

Die erste Methode ist asynchron, um mehrere überlappende Lesevorgänge zu unterstützen. Die anderen sind synchron.

Theoretisch kann jeder Filter IAsyncReader unterstützen, in der Praxis ist er jedoch für Quellfilter konzipiert, die eine Verbindung mit Parserfiltern herstellen. Der Parser verhält sich sehr ähnlich wie ein Quellfilter im Pushmodell. Wenn er angehalten wird, wird ein Streamingthread erstellt, der Daten aus der IAsyncReader-Verbindung abruft und nach unten pusht. Die Ausgabepins verwenden IMemInputPin, und der Rest des Graphen verwendet das Standard-Pushmodell.

Datenfluss im Filtergraphen