지원되는 속도를 확인하는 방법

재생 속도를 변경하기 전에 애플리케이션은 파이프라인의 개체에서 재생 속도를 지원하는지 확인해야 합니다. IMFRateSupport 인터페이스는 최대 전달 및 역방향 속도, 요청된 속도에 가장 가까운 지원 속도 및 가장 느린 속도를 가져오는 메서드를 제공합니다. 이러한 각 속도 쿼리는 재생 방향과 씬닝을 사용할지 여부를 지정할 수 있습니다. 정확한 재생 속도는 IMFRateControl 인터페이스를 사용하여 쿼리됩니다.

재생 속도 변경에 대한 자세한 내용은 미디어 세션에서 재생 속도를 설정하는 방법을 참조 하세요.

재생 속도에 대한 일반적인 내용은 속도 제어 정보를 참조 하세요.

현재 재생 속도를 확인하려면

  1. 미디어 세션에서 속도 제어 서비스를 가져옵니다.

    IMFRateControl *pRateControl = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateControl, 
           (void**) &pRateControl );
    

    MFGetService의 punkObject 매개 변수에 초기화된 IMFMediaSession 인터페이스 포인터를 전달합니다.

    애플리케이션은 미디어 세션을 통해 속도 제어 서비스를 쿼리해야 합니다. 내부적으로 미디어 세션은 토폴로지의 개체를 쿼리합니다.

  2. IMFRateControl::GetRate 메서드를 호출하여 현재 재생 속도를 가져옵니다.

    hr = pRateControl->GetRate(&bThin, &rate);
    

    GetRate pfThin 매개 변수는 스트림이 현재 얇아지고 있는지 여부를 나타내는 BOOL 값을 받습니다. 스트림에 대한 씬닝 지원을 쿼리하지 않으려면 애플리케이션이 NULL을 통과해야 합니다. pflRate 매개 변수는 현재 재생 속도를 받습니다.

지원되는 가장 가까운 속도를 확인하려면

  1. 미디어 세션에서 속도 지원 서비스를 가져옵니다.

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    MFGetService의 punkObject 매개 변수에 초기화된 IMFMediaSession 인터페이스 포인터를 전달합니다.

  2. IMFRateSupport::IsRateSupported 메서드를 호출하여 요청된 재생 속도에 가장 가까운 지원되는 속도를 검색합니다.

    float rateRequested = 4.0;
    float actualRate = 0;
    hr = pRateSupport->IsRateSupported(
           TRUE, 
           rateRequested, 
           &actualRate );
    

    이 예제에서는 4.0의 재생 속도가 씬닝에서 지원되는지 여부를 쿼리합니다. IsRateSupportedfThin 매개 변수에 TRUE를 전달하여 표시됩니다. 이 속도가 지원 되는 경우 actualRate 에는 4.0의 재생 속도가 포함되고 반환 값이 S_OK 호출에 성공합니다. 정확한 재생 속도가 지원되지 않는 경우 가장 가까운 지원 속도는 actualRate에서 수신됩니다. 속도가 지원되지 않고 가장 가까운 재생 속도를 사용할 수 없는 경우 호출은 적절한 오류 코드를 반환합니다.

    이러한 값은 로드되는 파이프라인 구성 요소에 따라 변경될 수 있습니다. 따라서 새 토폴로지 로드할 때마다 값을 다시 쿼리해야 합니다.

    원하는 재생 속도가 지원되지 않는 경우 한 가지 옵션은 토폴로지의 각 개체를 개별적으로 쿼리하여 특정 구성 요소가 속도를 지원하지 않는지 확인하는 것입니다. 이 구성 요소 없이 토폴로지 다시 빌드한 다음 원하는 속도로 재생할 수 있습니다. 예를 들어 오디오 렌더러를 제외한 모든 구성 요소가 지정된 속도를 지원하는 경우 오디오 분기 없이 토폴로지를 다시 빌드하고 오디오 없이 원하는 속도로 재생할 수 있습니다.

지원되는 가장 느린 속도를 확인하려면

  1. 미디어 세션에서 속도 지원 서비스를 가져옵니다.

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    MFGetService의 punkObject 매개 변수에 초기화된 IMFMediaSession 인터페이스 포인터를 전달합니다.

  2. IMFRateSupport::GetSlowestRate 메서드를 호출하여 지원되는 가장 느린 속도를 검색합니다.

    float slowestRate = 0;
    hr = pRateSupport->GetSlowestRate(
           MFRATE_REVERSE, 
           TRUE, 
           &slowestRate);
    

    이 예제에서는 씬닝을 사용하여 가장 느린 역방향 재생 속도를 쿼리합니다. 하한 속도는 GetSlowestRate의 slowestRate 매개 변수로 수신됩니다.

    역방향 재생 또는 씬닝이 지원되지 않는 경우 호출은 적절한 오류 코드를 반환합니다.

미디어 세션

속도 제어

검색, 빠른 전달 및 역방향 플레이