Benachrichtigungen zum Streamende
[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.]
Wenn ein Quellfilter daten sendet, ruft er die IPin::EndOfStream-Methode auf dem Downstreameingabenadel auf. Der Downstreamfilter verteilt den Aufruf an den nächsten Filter usw. Wenn der EndOfStream-Aufruf den Renderer erreicht, sendet der Renderer ein EC_COMPLETE-Ereignis an den Filter Graph Manager. Wenn der Renderer über mehrere Eingabenadeln verfügt, wird das EC_COMPLETE-Ereignis übermittelt, nachdem jeder Eingabenadel die Streamendebenachrichtigung empfangen hat.
Ein Filter muss EndOfStream-Aufrufe mit anderen Streamingaufrufen serialisieren, z . B. IMemInputPin::Receive. (Anders ausgedrückt: Der Downstreamfilter muss die Aufrufe immer in der richtigen Reihenfolge empfangen.)
In einigen Fällen erkennt ein Downstreamfilter möglicherweise das Ende des Datenstroms, bevor der Quellfilter dies tut. (Der Downstreamfilter analysiert beispielsweise den Stream.) In diesem Fall kann der Downstreamfilter die Benachrichtigung zum Ende des Datenstroms senden. In diesem Fall sollte er S_FALSE von IMemInputPin::Receive zurückgeben, bis das Diagramm beendet oder geleert wird. Der S_FALSE Rückgabewert informiert den Quellfilter, das Senden von Daten zu beenden.
Standardbehandlung für EC_COMPLETE
Standardmäßig leitet der Filter Graph Manager nicht jedes EC_COMPLETE-Ereignis an die Anwendung weiter. Stattdessen wird gewartet, bis alle Streams EC_COMPLETE signalisiert haben, und sendet dann ein einzelnes EC_COMPLETE-Ereignis. Daher empfängt die Anwendung das Ereignis, nachdem jeder Stream abgeschlossen ist.
Um die Anzahl der Streams zu bestimmen, zählt der Filtergraph-Manager die Anzahl der Filter, die die Suche unterstützen (über IMediaSeeking oder IMediaPosition) und über einen gerenderten Eingabenadel verfügen, der als Eingabenadel ohne entsprechende Ausgaben definiert ist. Der Filter Graph-Manager bestimmt, ob ein Pin auf zwei Arten gerendert wird:
- Die IPin::QueryInternalConnections-Methode des Pins gibt null im nPin-Parameter zurück.
- Der Filter macht die IAMFilterMiscFlags-Schnittstelle verfügbar und gibt das AM_FILTER_MISC_FLAGS_IS_RENDERER-Flag zurück.
Benachrichtigungen zum Streamende im Pullmodus
In einer IAsyncReader-Verbindung sendet der Quellfilter keine Benachrichtigung zum Streamende. Instread erfolgt dies durch den nachgeschalteten Filter, bei dem es sich in der Regel um einen Parserfilter handelt. Der Parser sendet den EndOfStream-Aufruf nachgeschaltet. Es wird kein Upstream an den Quellfilter gesendet.
Zugehörige Themen