iMediaSeeking::SetRate 方法 (strmif.h)

[與此頁面 相關的功能 DirectShow 是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft 強烈建議新程式代碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式代碼,以使用新的 API。]

方法會 SetRate 設定播放速率。

語法

HRESULT SetRate(
  [in] double dRate
);

參數

[in] dRate

播放速率。 不得為零。

傳回值

傳回 HRESULT 值。 可能的值如下。

傳回碼 描述
S_OK
成功。
E_INVALIDARG
指定的速率為零或負值。 (請參閱<備註>)。
E_NOTIMPL
未實作。
E_POINTER
NULL 指標自變數。
VFW_E_UNSUPPORTED_AUDIO
音訊裝置或篩選器不支援此速率。

備註

播放速率會以一般速度的比例表示。 因此,1.0 是一般播放速度,0.5 是半速度,而 2.0 則是兩倍的速度。 針對音訊串流,變更速率也會變更音調。

負值表示反向播放。 大部分篩選條件都不支援負播放,但如果 dRate 參數為負數,則會傳回錯誤碼。

當應用程式在 Filter Graph 管理員上呼叫這個方法時,Filter Graph 管理員會執行下列動作:

  1. 呼叫 IMediaSeeking::GetCurrentPosition 方法。 此呼叫會傳回篩選圖形管理員所計算的目前位置。
  2. 如果圖表已暫停或執行) ,則會停止篩選圖表 (。
  3. 在篩選上呼叫 IMediaSeeking::SetPositions 方法,並將目前位置當做開始時間。 這會影響將數據流時間重設為零。
  4. SetRate使用新的速率,在篩選上呼叫 方法。
  5. 如果篩選圖表已暫停或正在執行,則會繼續篩選圖表。
如果在步驟 4 中發生錯誤,篩選圖形管理員會嘗試還原先前的速率。

篩選應該回應速率變更,如下所示:

剖析器和來源篩選: 產生時間戳的篩選條件會回應 SetRate 呼叫。 這通常是剖析器篩選條件,例如 AVI 分割器篩選器,但可能是來源篩選條件。 在任何搜尋或速率變更之後,篩選條件應該使用新的設定來呼叫 IPin::NewSegment 方法。 速率變更之後,它應該據以調整其時間戳。 因為速率變更前面有搜尋,所以時間戳會從零重新啟動,因此篩選條件可以直接除以速率來計算新的時間戳。

譯碼器篩選: 譯碼器不應該在呼叫上採取 SetRate 動作,而不是在上游傳遞它們。 相反地,他們應該回應上游剖析器所發出的 NewSegment 呼叫。 當譯碼器篩選收到新的區段資訊時,應該儲存值並傳遞 NewSegment 呼叫下游。 某些譯碼器需要藉由插補輸入來產生額外的時間戳;他們應該在這麼做時將速率變更納入考慮。

轉譯器: 視訊轉譯器通常可以忽略速率變更,因為傳入的畫面已經有正確的時間戳。 音訊轉譯器必須修改其播放速率,因為音訊譯碼器通常不會進行速率變更轉換。

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 strmif.h (包含 Dshow.h)
程式庫 Strmiids.lib

另請參閱

錯誤和成功碼

IMediaSeeking 介面