如何執行清除
藉由與時間的視覺表示互動,以立即搜尋檔案中的特定點,例如滾動條,即可執行清除。 在 Media Foundation 中,「scrubbing」表示在檔案中搜尋並取得更新的影格。
如需清除的相關信息,請參閱 關於速率控制。
若要執行擦洗
呼叫 MFGetService,從 媒體會話取得 IMFRateControl 介面。
注意
請勿從媒體來源取得 IMFRateControl 介面。 總是從媒體會話中獲取介面。
呼叫 IMFRateControl::SetRate 將播放速率設定為零。 如需呼叫此方法的詳細資訊,請參閱 如何在媒體會話上設定播放速率。
藉由指定要在 MFTIME 類型中搜尋的簡報時間,在 PROPVARIANT 中建立搜尋位置。
呼叫 IMFMediaSession::Start,並取得開始播放的搜尋位置。
清除作業完成時,媒體會話會傳送 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。
相關主題