전송

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

필터 그래프를 통해 미디어 데이터를 이동하려면 DirectShow 필터가 가능한 여러 프로토콜 중 하나를 지원해야 합니다. 이러한 프로토콜을 전송이라고 합니다. 두 필터가 연결되면 동일한 전송을 지원해야 합니다. 그렇지 않으면 미디어 데이터를 교환할 수 없습니다. 일반적으로 전송을 사용하려면 핀 중 하나가 특정 인터페이스를 지원해야 합니다. 필터가 연결되면 한 핀이 인터페이스에 대해 다른 핀을 쿼리합니다.

대부분의 DirectShow 필터는 기본 메모리에 미디어 데이터를 저장하고 핀 연결을 통해 다른 필터로 전달합니다. 이 유형의 전송을 로컬 메모리 전송이라고 합니다. 로컬 메모리 전송이 DirectShow에서 가장 일반적인 전송이지만 모든 필터에서 사용하는 것은 아닙니다. 예를 들어 일부 필터는 하드웨어 경로를 따라 미디어 데이터를 보내고 핀만 사용하여 제어 정보를 제공합니다. 예를 들어 IOverlay 인터페이스를 참조하세요.

DirectShow는 로컬 메모리 전송을 위한 푸시 모델과 끌어오기 모델의 두 가지 메커니즘을 정의합니다. 푸시 모델에서 원본 필터는 데이터를 생성하고 다음 필터 다운스트림으로 전달합니다. 이 필터는 데이터를 수동적으로 수신하고, 처리하고, 다운스트림으로 보냅니다. 끌어오기 모델에서 원본 필터는 파서 필터에 연결됩니다. 파서 필터는 원본 필터에서 데이터를 요청합니다. 원본 필터는 데이터를 전달하여 요청에 응답합니다. 푸시 모델은 IMemInputPin 인터페이스를 사용하고 끌어오기 모델은 IAsyncReader 인터페이스를 사용합니다.

푸시 모델은 끌어오기 모델보다 더 일반적입니다. 따라서 다음 문서에서는 푸시 모델을 가정합니다. 이 섹션의 마지막 문서인 끌어오기 모델에서는 IAsyncReader 인터페이스가 IMemInputPin과 어떻게 다른지 설명합니다.

필터 그래프의 Data Flow