Transportprotokolle

Um Mediendaten durch das Filterdiagramm zu verschieben, muss ein DirectShow-Filter eines von mehreren möglichen Protokollen unterstützen. Diese Protokolle werden als Transporte bezeichnet. Wenn zwei Filter eine Verbindung herstellen, müssen sie denselben Transport unterstützen. Andernfalls können sie keine Mediendaten austauschen. In der Regel erfordert ein Transport, dass einer der Pins eine bestimmte Schnittstelle unterstützt. Wenn die Filter eine Verbindung herstellen, fragt ein Pin den anderen nach der Schnittstelle ab.

Die meisten DirectShow-Filter enthalten Mediendaten im Hauptspeicher und stellen sie für andere Filter über Pinverbindungen hinweg zur Verfügung. Dieser Transporttyp wird als lokaler Speichertransport bezeichnet. Obwohl der lokale Speichertransport der gängigste Transport in DirectShow ist, wird er nicht von allen Filtern verwendet. Einige Filter senden z. B. Mediendaten entlang eines Hardwarepfads und verwenden Pins nur, um Steuerungsinformationen zu übermitteln. Sehen Sie sich beispielsweise die IOverlay-Schnittstelle an.

DirectShow definiert zwei Mechanismen für den lokalen Speichertransport: das Pushmodell und das Pullmodell. Im Pushmodell generiert ein Quellfilter Daten und übergibt sie an den nächsten Filter downstream. Dieser Filter empfängt die Daten passiv, verarbeitet sie und sendet sie weiter nachgeschaltet. Im Pullmodell ist der Quellfilter mit einem Parserfilter verbunden. Der Parserfilter fordert Daten vom Quellfilter an. Der Quellfilter antwortet auf die Anforderungen, indem er Daten liefert. Das Pushmodell verwendet die IMemInputPin-Schnittstelle, und das Pullmodell verwendet die IAsyncReader-Schnittstelle.

Das Pushmodell ist häufiger als das Pullmodell. Daher wird in den folgenden Artikeln von einem Pushmodell ausgegangen. Im letzten Artikel in diesem Abschnitt, PullModell,wird beschrieben, wie sich die IAsyncReader-Schnittstelle von IMemInputPin unterscheidet.

Daten Flow im Filter-Graph