メディア セッションで再生速度を設定する方法

高速転送や巻き戻しなどの再生機能を実装するには、アプリケーションでメディア ストリームの再生速度を変更することが必要になる場合があります。 Media Foundation は、アプリケーションが再生レートを動的に設定するために使用する必要があるレート制御サービスを提供します。

再生速度を設定する前に、アプリケーションはメディア ソースでレートがサポートされているかどうかを確認する必要があります。 サポートされているレートのクエリの詳細については、「サポートされているレート を決定する方法」を参照してください。

再生レートの詳細については、「 レート制御について」を参照してください。

再生速度を設定するには

  1. MFGetService を呼び出して、メディア セッションからレート制御オブジェクトを取得します。

    MFGetService を呼び出すアプリケーションでは、次のことを確認する必要があります。

    • punkObject パラメーターには、初期化された IMFMediaSession インターフェイス ポインターが含まれています。
    • メモリ リークを回避するために、 ppvObject パラメーターで受信したレート制御オブジェクトが解放されます。
  2. IMFRateControl::SetRate メソッドを呼び出して、再生速度を設定します。 SetRate が非同期に完了すると、アプリケーションは MESessionRateChanged イベントを受け取ります。

次のコードは 、SetRate メソッドを呼び出して再生速度を設定する方法を示しています。

///////////////////////////////////////////////////////////////////////
//  Name: SetPlaybackRate
//  Description: 
//      Gets the rate control service from Media Session.
//      Sets the playback rate to the specified rate.
//  Parameter:
//      pMediaSession: [in] Media session object to query.
//      rateRequested: [in] Playback rate to set.
//      bThin: [in] Indicates whether to use thinning.
///////////////////////////////////////////////////////////////////////

HRESULT SetPlaybackRate(
          IMFMediaSession *pMediaSession, 
          float rateRequested, 
          BOOL bThin)
{
    HRESULT hr = S_OK;
    IMFRateControl *pRateControl = NULL;

    // Get the rate control object from the Media Session.
    hr = MFGetService( 
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE, 
           IID_IMFRateControl, 
           (void**) &pRateControl ); 

    // Set the playback rate.
    if(SUCCEEDED(hr))
    {
        hr = pRateControl ->SetRate( bThin, rateRequested); 
    }

    // Clean up.
    SAFE_RELEASE(pRateControl );

    return hr;
}

アプリケーションは、負またはゼロのレートから正のレートに移行する前に、停止または一時停止する必要があります。 これらの状態の詳細については、「 表示状態を制御する方法」を参照してください

メディア セッション

レート制御

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