Udostępnij przez


Model ściągania

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

W interfejsie IMemInputPin filtr nadrzędny określa, jakie dane mają być wysyłane, i wypycha dane do filtru podrzędnego. W przypadku niektórych filtrów model ściągania jest bardziej odpowiedni. W tym miejscu filtr podrzędny żąda danych z filtru nadrzędnego. Próbki nadal są przesyłane podrzędne, od wyprowadzenia wyjściowego do wejściowego numeru PIN, ale filtr podrzędny inicjuje przepływ danych. Ten typ połączenia używa interfejsuIAsyncReader.

Typowym zastosowaniem modelu ściągania jest odtwarzanie plików. Na przykład na wykresie odtwarzania AVI filtr Async File Source wykonuje ogólne operacje odczytu plików i dostarcza dane jako strumień bajtów bez informacji o formacie. Filtr AVI Splitter odczytuje nagłówki AVI i analizuje strumień w próbkach wideo i audio. Splitter AVI może określić, jakich danych potrzebuje lepiej niż filtr źródła pliku asynchronicznego, a zatem używa IAsyncReader zamiast IMemInputPin.

Aby zażądać danych z wyjściowego numeru PIN, numer PIN danych wejściowych wywołuje jedną z następujących metod:

Pierwsza metoda jest asynchroniczna, aby obsługiwać wiele nakładających się operacji odczytu. Pozostałe są synchroniczne.

Teoretycznie każdy filtr może obsługiwać IAsyncReader, ale w praktyce jest przeznaczony dla filtrów źródłowych łączących się z filtrami analizatora. Analizator działa bardzo podobnie jak filtr źródłowy w modelu wypychania. Po wstrzymaniu tworzy on wątek przesyłania strumieniowego, który ściąga dane z połączenia IAsyncReader i wypycha go do sieci podrzędnej. Wyprowadzenia wyjściowe używają IMemInputPin, a reszta grafu używa standardowego modelu wypychania.

przepływ danych w funkcji Filter Graph