如何執行清除
清除會執行以即時方式搜尋檔案內的特定點,方法是與時間的視覺標記法互動,例如捲軸。 在媒體基礎中,清除表示搜尋檔案並取得一個更新的框架。
如需清除的相關資訊,請參閱 關於速率控制。
執行清除
呼叫MFGetService以從媒體會話取得IMFRateControl介面。
注意
請勿從媒體來源取得 IMFRateControl 介面。 一律從媒體會話取得介面。
呼叫 IMFRateControl::SetRate 將播放速率設定為零。 如需呼叫此方法的詳細資訊,請參閱 如何在媒體會話上設定播放速率。
藉由指定要在MFTIME類型中搜尋的簡報時間,在PROPVARIANT中建立搜尋位置。
呼叫 IMFMediaSession::從 搜尋位置開始播放。
清除作業完成時,媒體會話會傳送 MESessionScrubSampleComplete 事件。 請稍候此事件,再再次呼叫 Start 以進行另一個清除作業。
範例
下列程式碼範例示範如何執行清除。
HRESULT SkipToPosition (MFTIME SeekTime, IMFMediaSession *pMediaSession)
{
PROPVARIANT var;
PropVariantInit(&var);
IMFRateControl *pRateControl = NULL;
// Get the rate control service.
HRESULT hr = MFGetService(pMediaSession, MF_RATE_CONTROL_SERVICE, IID_PPV_ARGS(&pRateControl));
// Set the playback rate to zero without thinning.
if(SUCCEEDED(hr))
{
hr = pRateControl ->SetRate( FALSE, 0.0F);
}
// Create the Media Session start position.
if( SeekTime == PRESENTATION_CURRENT_POSITION )
{
var.vt = VT_EMPTY;
}
else
{
var.vt = VT_I8;
var.hVal.QuadPart = SeekTime;
}
// Start the Media Session.
if(SUCCEEDED(hr))
{
hr = pMediaSession->Start( NULL, &var);
}
// Clean up.
SafeRelease(&pRateControl);
PropVariantClear(&var)
return hr;
}
成功的清除作業會產生 MESessionScrubSampleComplete 事件,之後所有串流接收都會以新的畫面更新,且清除作業順利完成。 清除視訊檔案會顯示所搜尋的畫面,但不會產生音訊輸出。
應用程式可以執行畫面逐步執行,方法是將播放速率設定為零,然後傳遞在對IMFMediaSession::Start呼叫中設定為VT_EMPTY的PROPVARIANT。
相關主題