メディア セッションで再生速度を設定する方法
高速転送や巻き戻しなどの再生機能を実装するには、アプリケーションでメディア ストリームの再生速度を変更することが必要になる場合があります。 Media Foundation は、アプリケーションが再生レートを動的に設定するために使用する必要があるレート制御サービスを提供します。
再生速度を設定する前に、アプリケーションはメディア ソースでレートがサポートされているかどうかを確認する必要があります。 サポートされているレートのクエリの詳細については、「サポートされているレート を決定する方法」を参照してください。
再生レートの詳細については、「 レート制御について」を参照してください。
再生速度を設定するには
MFGetService を呼び出して、メディア セッションからレート制御オブジェクトを取得します。
MFGetService を呼び出すアプリケーションでは、次のことを確認する必要があります。
- punkObject パラメーターには、初期化された IMFMediaSession インターフェイス ポインターが含まれています。
- メモリ リークを回避するために、 ppvObject パラメーターで受信したレート制御オブジェクトが解放されます。
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;
}
アプリケーションは、負またはゼロのレートから正のレートに移行する前に、停止または一時停止する必要があります。 これらの状態の詳細については、「 表示状態を制御する方法」を参照してください。
関連トピック