Udostępnij przez


Transportów

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

Aby przenieść dane multimedialne za pośrednictwem wykresu filtru, filtr DirectShow musi obsługiwać jeden z kilku możliwych protokołów. Te protokoły są nazywane transportami. Gdy dwa filtry łączą się, muszą obsługiwać ten sam transport; w przeciwnym razie nie mogą wymieniać danych multimedialnych. Zazwyczaj transport wymaga, aby jeden z wyprowadzeń obsługiwał określony interfejs. Gdy filtry nawiążą połączenie, jedno przypięcie wysyła zapytanie do drugiego dla interfejsu.

Większość filtrów DirectShow przechowuje dane multimediów w pamięci głównej i dostarcza je do innych filtrów między połączeniami pin. Ten typ transportu jest nazywany transportem pamięci lokalnej. Chociaż transport pamięci lokalnej jest najczęstszym transportem w programie DirectShow, nie wszystkie filtry go używają. Na przykład niektóre filtry wysyłają dane multimedialne wzdłuż ścieżki sprzętowej i używają numerów PIN tylko do dostarczania informacji o kontrolce. Zobacz na przykład interfejs IOverlay.

DirectShow definiuje dwa mechanizmy transportu pamięci lokalnej, model wypychania i model ściągania. W modelu wypychania filtr źródłowy generuje dane i dostarcza je do następnego podrzędnego filtru. Ten filtr pasywnie odbiera dane, przetwarza je i wysyła dalej. W modelu ściągania filtr źródłowy jest połączony z filtrem analizatora. Filtr analizatora żąda danych z filtru źródłowego. Filtr źródłowy odpowiada na żądania, dostarczając dane. Model wypychania używa interfejsuIMemInputPin, a model ściągania używa interfejsu IAsyncReader.

Model wypychania jest bardziej typowy niż model ściągania. W związku z tym w poniższych artykułach przyjęto założenie modelu wypychania. Ostatni artykuł w tej sekcji Pull Modelopisuje, w jaki sposób interfejs IAsyncReader różni się od interfejsu IMemInputPin.

przepływ danych w funkcji Filter Graph