다음을 통해 공유


스트림 종료 알림

[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngineAudio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 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 호출 다운스트림을 보냅니다. 원본 필터에 하나의 업스트림을 보내지 않습니다.

스트림 끝 제공하는