다음을 통해 공유


Seek 명령에 대한 시간 형식

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

IMediaSeeking 인터페이스의 대부분의 메서드에는 현재 위치 또는 중지 위치와 같은 위치 값을 표현하는 매개 변수가 있습니다. 기본적으로 이러한 매개 변수는 참조 시간이라고도 하는 100나노초 단위로 표현됩니다. 검색할 수 있는 모든 필터는 참조 시간별 검색을 지원해야 합니다. 일부 필터는 특정 프레임 번호를 찾거나 스트림 내에서 지정된 바이트 오프셋을 찾는 등 다른 시간 단위를 사용할 수도 있습니다. 이러한 각 시간 단위는 시간 형식이라고 하며 GUID(Globally Unique Identifier)에 의해 정의됩니다. DirectShow에서 정의한 시간 형식 목록은 시간 형식 GUID참조하세요. 타사에서는 사용자 지정 시간 형식에 대한 GUID를 정의할 수도 있습니다.

현재 필터 그래프에 있는 필터가 특정 시간 형식을 지원하는지 확인하려면 IMediaSeeking::IsFormatSupported 메서드를 호출합니다. 형식이 지원되는 경우 메서드는 S_OK 반환합니다. 그렇지 않으면 S_FALSE 또는 오류 코드를 반환합니다. 형식이 지원되는 경우 IMediaSeeking::SetTimeFormat 메서드를 호출하여 해당 형식으로 전환할 수 있습니다. SetTimeFormat 메서드가 성공하면 새 시간 형식을 사용하여 후속 seek 명령이 표현됩니다.

다음은 그래프가 프레임 번호로 검색을 지원하는지 여부를 확인하는 예제입니다. 그렇다면 숫자 20을 프레임하려고 합니다.

hr = pSeek->IsFormatSupported(&TIME_FORMAT_FRAME);
if (hr == S_OK)
{
    hr = pSeek->SetTimeFormat(&TIME_FORMAT_FRAME);
    if (SUCCEEDED(hr))
    {
        // Seek to frame number 20.
        LONGLONG rtNow = 20;
        hr = pSeek->SetPositions(
            &rtNow, AM_SEEKING_AbsolutePositioning, 
            0, AM_SEEKING_NoPositioning);
    }
}

시간 형식은 검색 명령에만 적용됩니다. 그래프 재생 또는 기타 작업에는 영향을 미치지 않습니다.