스트림 종료 알림

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

원본 필터가 데이터 전송을 완료하면 다운스트림 입력 핀에서 IPin::EndOfStream 메서드를 호출합니다. 다운스트림 필터는 다음 필터에 대한 호출을 전파합니다. EndOfStream 호출이 렌더러에 도달하면 렌더러는 필터 그래프 관리자에 EC_COMPLETE 이벤트를 보냅니다. 렌더러에 여러 입력 핀이 있는 경우 모든 입력 핀이 스트림 종료 알림을 받은 후 EC_COMPLETE 이벤트를 전달합니다.

필터는 IMemInputPin::Receive와 같은 다른 스트리밍 호출을 사용하여 EndOfStream 호출을 직렬화해야 합니다. 즉, 다운스트림 필터는 항상 올바른 순서로 호출을 수신해야 합니다.

경우에 따라 다운스트림 필터는 원본 필터가 실행되기 전에 스트림의 끝을 검색할 수 있습니다. (예를 들어 다운스트림 필터는 스트림을 구문 분석할 수 있습니다.) 이 경우 다운스트림 필터는 스트림 종료 알림을 보낼 수 있습니다. 이 경우 그래프가 중지되거나 플러시될 때까지 IMemInputPin::Receive 에서 S_FALSE 반환해야 합니다. S_FALSE 반환 값은 원본 필터에 데이터 전송을 중지하도록 알릴 수 있습니다.

EC_COMPLETE 기본 처리

기본적으로 Filter Graph Manager는 모든 EC_COMPLETE 이벤트를 애플리케이션에 전달하지 않습니다. 대신 모든 스트림이 EC_COMPLETE 신호를 보낼 때까지 기다린 다음 단일 EC_COMPLETE 이벤트를 보냅니다. 따라서 애플리케이션은 모든 스트림이 완료된 후 이벤트를 수신합니다.

스트림 수를 확인하기 위해 Filter Graph Manager는 검색( IMediaSeeking 또는 IMediaPosition을 통해)을 지원하는 필터 수를 계산하고 렌더링된 입력 핀을 갖습니다. 이 핀은 해당 출력이 없는 입력 핀으로 정의됩니다. 필터 그래프 관리자는 핀이 다음 두 가지 방법 중 하나로 렌더링되는지 여부를 결정합니다.

끌어오기 모드의 스트림 종료 알림

IAsyncReader 연결에서 원본 필터는 스트림 종료 알림을 보내지 않습니다. 이 작업은 일반적으로 파서 필터인 다운스트림 필터에 의해 수행됩니다. 파서는 EndOfStream 호출 다운스트림을 보냅니다. 원본 필터에 하나의 업스트림 보내지 않습니다.

스트림의 끝 제공