Freigeben über


Pullmodell

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

Im IMemInputPin Schnittstelle bestimmt der Upstreamfilter, welche Daten gesendet werden sollen, und die Daten werden an den downstream-Filter übertragen. Bei einigen Filtern ist ein Pull- Modell besser geeignet. Hier fordert der downstream-Filter Daten aus dem Upstreamfilter an. Beispiele werden weiterhin nachgeschaltet, vom Ausgabeheft zum Eingabenadel, aber der nachgeschaltete Filter initiiert den Datenfluss. Dieser Verbindungstyp verwendet die IAsyncReader Schnittstelle.

Die typische Verwendung für das Pullmodell befindet sich in der Dateiwiedergabe. In einem AVI-Wiedergabediagramm führt beispielsweise der Async File Source Filter generische Dateilesevorgänge aus und liefert die Daten als Bytedatenstrom ohne Formatinformationen. Der AVI Splitter Filter liest die AVI-Header und analysiert den Datenstrom in Video- und Audiobeispiele. Der AVI Splitter kann bestimmen, welche Daten es besser benötigt als der Async File Source-Filter und verwendet daher IAsyncReader anstelle von IMemInputPin.

Um Daten von der Ausgabenadel anzufordern, ruft die 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 sie angehalten wird, wird ein Streamingthread erstellt, der Daten aus dem IAsyncReader Verbindung abruft und nach unten verschiebt. Die Ausgabepins verwenden IMemInputPin, und der Rest des Diagramms verwendet das Standard-Pushmodell.

Datenfluss im Filterdiagramm-