共用方式為


如何執行清除

清除會執行以即時方式搜尋檔案內的特定點,方法是與時間的視覺標記法互動,例如捲軸。 在媒體基礎中,清除表示搜尋檔案並取得一個更新的框架。

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

執行清除

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

    注意

    請勿從媒體來源取得 IMFRateControl 介面。 一律從媒體會話取得介面。

     

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

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

  4. 呼叫 IMFMediaSession::從 搜尋位置開始播放。

  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

媒體會話

速率控制