[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngine 및 Audio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
필터 그래프는 현재 위치와 중지 위치의 두 위치 값을 유지합니다. 다음과 같이 정의됩니다.
- 그래프가 실행 중인 경우 현재 위치는 원본의 시작을 기준으로 현재 재생 위치입니다. 그래프가 중지되거나 일시 중지되면 현재 위치는 다음 실행 명령에서 스트리밍이 시작되는 지점입니다.
- 중지 위치는 스트림이 종료되는 지점입니다. 그래프가 중지 위치에 도달하면 더 이상 데이터가 스트리밍되지 않고 필터 그래프 관리자가 EC_COMPLETE 이벤트를 게시합니다. 그러나 그래프는 자동으로 중지된 상태로 전환되지 않습니다. 자세한 내용은 이벤트응답)을 참조하세요.
이러한 값을 검색하려면 IMediaSeeking::GetPositions 메서드를 호출합니다. 반환된 값은 항상 원본 미디어 원본을 기준으로 합니다. 기본적으로 값은 참조 시간 단위입니다. 경우에 따라 시간 단위를 변경할 수 있습니다. 자세한 내용은 seek 명령 시간 형식을 참조하세요.
새 위치를 찾거나 새 중지 위치를 설정하려면 다음 예제와 같이 IMediaSeeking::SetPositions 메서드를 호출합니다.
#define ONE_SECOND 10000000
REFERENCE_TIME rtNow = 2 * ONE_SECOND,
rtStop = 5 * ONE_SECOND;
hr = pSeek->SetPositions(
&rtNow, AM_SEEKING_AbsolutePositioning,
&rtStop, AM_SEEKING_AbsolutePositioning
);
메모
1초는 참조 시간 10,000,000단위입니다. 편의를 위해 이 값은 ONE_SECOND 정의합니다. DirectShow 기본 클래스 라이브러리를 사용하는 경우 상수 UNITS의 값은 동일합니다.
rtNow 매개 변수는 새 현재 위치를 지정합니다. 두 번째 매개 변수는 rtNow 를 해석하는 방법을 정의하는 플래그입니다. 이 예제에서 AM_SEEKING_AbsolutePositioning 플래그는 rtNow 원본의 절대 위치를 지정한다는 것을 나타냅니다. 따라서 필터 그래프는 스트림 시작 2초 후의 위치를 찾습니다. rtStop 매개 변수는 중지 시간을 제공합니다. 마지막 매개변수는 rtStop이 또한 절대 위치임을 지정합니다.
이전 위치 값을 기준으로 위치를 지정하려면 AM_SEEKING_RelativePositioning 플래그를 사용합니다. 위치 값 중 하나를 변경하지 않은 상태로 두려면 AM_SEEKING_NoPositioning 플래그를 사용합니다. 이 경우 해당 시간 매개 변수는 NULL 수 있습니다. 다음 예제에서는 10초 앞으로 이동하지만 중지 위치는 변경되지 않습니다.
REFERENCE_TIME rtNow = 10 * ONE_SECOND;
hr = pSeek->SetPositions(
&rtNow, AM_SEEKING_RelativePositioning,
NULL, AM_SEEKING_NoPositioning
);
필터 그래프가 중지된 경우 비디오 렌더러는 검색 작업 후에 이미지를 업데이트하지 않습니다. 사용자에게는 검색이 수행되지 않은 것처럼 표시됩니다. 이미지를 업데이트하려면 검색 작업 후 그래프를 일시 중지합니다. 그래프를 일시 중지하면 비디오 렌더러에 대한 새 비디오 프레임이 표시됩니다. IMediaControl::StopWhenReady 메서드를 사용하여 그래프를 일시 중지한 다음 중지할 수 있습니다.