끌어오기 모델

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

IMemInputPin 인터페이스에서 업스트림 필터는 보낼 데이터를 결정하고 데이터를 다운스트림 필터로 푸시합니다. 일부 필터의 경우 끌어오기 모델이 더 적합합니다. 여기서 다운스트림 필터는 업스트림 필터에서 데이터를 요청합니다. 샘플은 출력 핀에서 입력 핀까지 다운스트림으로 이동하지만 다운스트림 필터는 데이터 흐름을 시작합니다. 이 유형의 연결은 IAsyncReader 인터페이스를 사용합니다.

끌어오기 모델에 대한 일반적인 사용은 파일 재생에 있습니다. 예를 들어 AVI 재생 그래프에서 비동기 파일 원본 필터는 일반 파일 읽기 작업을 수행하고 형식 정보 없이 데이터를 바이트 스트림으로 전달합니다. AVI 분할기 필터는 AVI 헤더를 읽고 스트림을 비디오 및 오디오 샘플로 구문 분석합니다. AVI 분할기는 비동기 파일 원본 필터보다 더 필요한 데이터를 결정할 수 있으므로 IMemInputPin 대신 IAsyncReader를 사용합니다.

출력 핀에서 데이터를 요청하기 위해 입력 핀은 다음 방법 중 하나를 호출합니다.

첫 번째 메서드는 여러 겹치는 읽기를 지원하기 위해 비동기입니다. 다른 항목은 동기식입니다.

이론적으로 모든 필터는 IAsyncReader를 지원할 수 있지만 실제로는 파서 필터에 연결하는 원본 필터용으로 설계되었습니다. 파서는 푸시 모델의 원본 필터와 매우 유사합니다. 일시 중지되면 IAsyncReader 연결에서 데이터를 끌어와 다운스트림으로 푸시하는 스트리밍 스레드를 만듭니다. 출력 핀은 IMemInputPin을 사용하고 나머지 그래프는 표준 푸시 모델을 사용합니다.

필터 그래프의 Data Flow