共用方式為


如何執行清除

藉由與時間的視覺表示互動,以立即搜尋檔案中的特定點,例如滾動條,即可執行清除。 在 Media Foundation 中,「scrubbing」表示在檔案中搜尋並取得更新的影格。

如需清除的相關信息,請參閱 關於速率控制

若要執行擦洗

  1. 呼叫 MFGetService,從 媒體會話取得 IMFRateControl 介面。

    注意

    請勿從媒體來源取得 IMFRateControl 介面。 總是從媒體會話中獲取介面。

     

  2. 呼叫 IMFRateControl::SetRate 將播放速率設定為零。 如需呼叫此方法的詳細資訊,請參閱 如何在媒體會話上設定播放速率

  3. 藉由指定要在 MFTIME 類型中搜尋的簡報時間,在 PROPVARIANT 中建立搜尋位置。

  4. 呼叫 IMFMediaSession::Start,並取得開始播放的搜尋位置。

  5. 清除作業完成時,媒體會話會傳送 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_EMPTYPROPVARIANT

媒體會話

速率控制