IMediaSeeking::SetRate 메서드(strmif.h)
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
메서드는 SetRate
재생 속도를 설정합니다.
구문
HRESULT SetRate(
[in] double dRate
);
매개 변수
[in] dRate
재생 속도. 0이 아니어야 합니다.
반환 값
HRESULT 값을 반환합니다. 가능한 값은 다음과 같습니다.
반환 코드 | Description |
---|---|
|
성공. |
|
지정된 속도는 0이거나 음수 값입니다. 설명 부분을 참조하세요. |
|
구현되지 않았습니다. |
|
NULL 포인터 인수입니다. |
|
오디오 장치 또는 필터는 이 속도를 지원하지 않습니다. |
설명
재생 속도는 정상 속도의 비율로 표현됩니다. 따라서 1.0은 정상적인 재생 속도, 0.5는 절반 속도, 2.0은 두 배의 속도입니다. 오디오 스트림의 경우 속도를 변경하면 피치도 변경됩니다.
음수 값은 역방향 재생을 나타냅니다. 대부분의 필터는 음수 재생을 지원하지 않지만 dRate 매개 변수가 음수이면 오류 코드를 반환합니다.
애플리케이션이 Filter Graph Manager에서 이 메서드를 호출하면 Filter Graph Manager에서 다음을 수행합니다.
- IMediaSeeking::GetCurrentPosition 메서드를 호출합니다. 이 호출은 Filter Graph Manager에서 계산한 현재 위치를 반환합니다.
- 필터 그래프를 중지합니다(그래프가 일시 중지되거나 실행 중인 경우).
- 현재 위치를 시작 시간으로 사용하여 필터에서 IMediaSeeking::SetPositions 메서드를 호출합니다. 스트림 시간을 0으로 다시 설정하는 효과가 있습니다.
SetRate
새 속도로 필터에서 메서드를 호출합니다.- 일시 중지되었거나 실행 중인 경우 필터 그래프를 다시 시작합니다.
필터는 다음과 같이 속도 변경에 응답해야 합니다.
파서 및 원본 필터: 타임스탬프를 시작하는 필터가 호출에 SetRate
응답합니다. 일반적으로 AVI 분할기 필터와 같은 파서 필터이지만 원본 필터일 수 있습니다. 검색 또는 속도 변경 후 필터는 새 설정을 사용하여 IPin::NewSegment 메서드를 호출해야 합니다. 속도 변경 후 그에 따라 타임스탬프를 조정해야 합니다. 속도 변경 앞에 검색이 있기 때문에 타임스탬프가 0에서 다시 시작되므로 필터는 단순히 속도로 나누어 새 타임스탬프를 계산할 수 있습니다.
디코더 필터: 디코더는 업스트림 전달하는 것 이외의 호출에 SetRate
대해 작동해서는 안 됩니다. 대신 업스트림 파서가 발급하는 NewSegment 호출에 응답해야 합니다. 디코더 필터가 새 세그먼트 정보를 받으면 값을 저장하고 NewSegment 호출 다운스트림을 전달해야 합니다. 일부 디코더는 입력을 보간하여 추가 타임스탬프를 생성해야 합니다. 이렇게 할 때는 속도 변경을 고려해야 합니다.
렌더러: 들어오는 프레임에 이미 올바른 타임스탬프를 가지고 있기 때문에 비디오 렌더러가 일반적으로 속도 변경을 무시할 수 있습니다. 오디오 디코더는 일반적으로 속도 변경 변환을 수행하지 않으므로 오디오 렌더러는 재생 속도를 수정해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | strmif.h(Dshow.h 포함) |
라이브러리 | Strmiids.lib |