다음을 통해 공유


Seek 명령에 대한 시간 형식

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

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

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

다음 예제에서는 그래프가 프레임 번호로 검색을 지원하는지 여부를 확인합니다. 그렇다면 숫자 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);
    }
}

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