Transportprotokolle

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

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 in Standard Arbeitsspeicher und übermitteln sie an andere Filter über Pinverbindungen. Diese Art des Transports wird als lokaler Speichertransport bezeichnet. Obwohl der lokale Speichertransport der häufigste Transport in DirectShow ist, verwenden ihn nicht alle Filter. Beispielsweise senden einige Filter Mediendaten über einen Hardwarepfad und verwenden nur Pins, um Steuerungsinformationen bereitzustellen. Sehen Sie sich z. B. 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 Nachgeschalteten Filter. Dieser Filter empfängt die Daten passiv, verarbeitet sie und sendet sie weiter nach unten. Im Pullmodell ist der Quellfilter mit einem Parserfilter verbunden. Der Parserfilter fordert Daten aus dem Quellfilter an. Der Quellfilter antwortet auf die Anforderungen, indem Daten bereitgestellt werden. Das Pushmodell verwendet die IMemInputPin-Schnittstelle , und das Pullmodell verwendet die IAsyncReader-Schnittstelle .

Das Pushmodell ist häufiger als das Pullmodell. Daher gehen die folgenden Artikel von einem Pushmodell aus. Im letzten Artikel in diesem Abschnitt, Pull Model, wird beschrieben, wie sich die IAsyncReader-Schnittstelle von IMemInputPin unterscheidet.

Datenfluss im Filterdiagramm