如何在媒體會話上設定播放速率
若要實作快速轉送和倒轉等播放功能,應用程式可能需要變更媒體數據流的播放速率。 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;
}
應用程式必須先停止或暫停,才能從負率或零率轉換為正率。 如需這些狀態的相關信息,請參閱 如何控制簡報狀態。
相關主題