サポートされている料金を確認する方法

再生速度を変更する前に、アプリケーションは、再生速度がパイプライン内のオブジェクトでサポートされているかどうかをチェックする必要があります。 IMFRateSupport インターフェイスには、最大順方向と逆方向のレート、要求されたレートに最も近いサポートされているレート、最も遅いレートを取得するメソッドが用意されています。 これらの各レート クエリでは、再生方向と間引きを使用するかどうかを指定できます。 正確な再生速度は、 IMFRateControl インターフェイスを使用して照会されます。

再生レートの変更については、「 メディア セッションで再生レートを設定する方法」を参照してください。

再生レートに関する一般的な情報については、「 レート制御について」を参照してください。

現在の再生速度を確認するには

  1. メディア セッションからレート制御サービスを取得します。

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

    初期化された IMFMediaSession インターフェイス ポインターを MFGetServicepunkObject パラメーターに渡します。

    アプリケーションは、メディア セッションを介してレート制御サービスのクエリを実行する必要があります。 内部的には、メディア セッションはトポロジ内のオブジェクトに対してクエリを実行します。

  2. 現在の再生速度を取得するには、 IMFRateControl::GetRate メソッドを呼び出します。

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

    GetRatepfThin パラメーターは、ストリームが現在間引かれているかどうかを示す BOOL 値を受け取ります。 ストリームの間引きサポートに対してクエリを実行しない場合、アプリケーションは NULL を 渡す必要があります。 pflRate パラメーターは、現在の再生速度を受け取ります。

サポートされている最も近いレートを確認するには

  1. メディア セッションからレート サポート サービスを取得します。

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

    初期化された IMFMediaSession インターフェイス ポインターを MFGetServicepunkObject パラメーターに渡します。

  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 で受信されます。 レートがサポートされておらず、最も近い再生速度がない場合、呼び出しは適切なエラー コードを返します。

    これらの値は、読み込まれるパイプライン コンポーネントに応じて変更できます。 そのため、新しい topololgy を読み込むたびに、値を再度クエリする必要があります。

    目的の再生速度がサポートされていない場合は、トポロジ内の各オブジェクトに対して個別にクエリを実行して、特定のコンポーネントがレートをサポートしていないかどうかを調べる方法があります。 このコンポーネントを使用せずにトポロジを再構築し、必要な速度で再生できる場合があります。 たとえば、オーディオ レンダラーを除くすべてのコンポーネントで特定のレートがサポートされている場合は、オーディオ ブランチなしでトポロジを再構築し、オーディオなしで目的のレートで再生できます。

サポートされている最も遅いレートを確認するには

  1. メディア セッションからレート サポート サービスを取得します。

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

    初期化された IMFMediaSession インターフェイス ポインターを MFGetServicepunkObject パラメーターに渡します。

  2. IMFRateSupport::GetSlowestRate メソッドを呼び出して、サポートされている最も遅いレートを取得します。

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

    この例では、間引きを使用して最も遅い逆再生速度を照会します。 下限レートは、GetSlowestRateslowestRate パラメーターで受信されます。

    逆再生または間引きがサポートされていない場合、呼び出しは適切なエラー コードを返します。

メディア セッション

レート制御

シーク、早送り、リバース プレイ