iMediaSeeking::SetRate 方法 (strmif.h)
[與此頁面 相關的功能 DirectShow 是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft 強烈建議新程式代碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式代碼,以使用新的 API。]
方法會 SetRate
設定播放速率。
語法
HRESULT SetRate(
[in] double dRate
);
參數
[in] dRate
播放速率。 不得為零。
傳回值
傳回 HRESULT 值。 可能的值如下。
傳回碼 | 描述 |
---|---|
|
成功。 |
|
指定的速率為零或負值。 (請參閱<備註>)。 |
|
未實作。 |
|
NULL 指標自變數。 |
|
音訊裝置或篩選器不支援此速率。 |
備註
播放速率會以一般速度的比例表示。 因此,1.0 是一般播放速度,0.5 是半速度,而 2.0 則是兩倍的速度。 針對音訊串流,變更速率也會變更音調。
負值表示反向播放。 大部分篩選條件都不支援負播放,但如果 dRate 參數為負數,則會傳回錯誤碼。
當應用程式在 Filter Graph 管理員上呼叫這個方法時,Filter Graph 管理員會執行下列動作:
- 呼叫 IMediaSeeking::GetCurrentPosition 方法。 此呼叫會傳回篩選圖形管理員所計算的目前位置。
- 如果圖表已暫停或執行) ,則會停止篩選圖表 (。
- 在篩選上呼叫 IMediaSeeking::SetPositions 方法,並將目前位置當做開始時間。 這會影響將數據流時間重設為零。
SetRate
使用新的速率,在篩選上呼叫 方法。- 如果篩選圖表已暫停或正在執行,則會繼續篩選圖表。
篩選應該回應速率變更,如下所示:
剖析器和來源篩選: 產生時間戳的篩選條件會回應 SetRate
呼叫。 這通常是剖析器篩選條件,例如 AVI 分割器篩選器,但可能是來源篩選條件。 在任何搜尋或速率變更之後,篩選條件應該使用新的設定來呼叫 IPin::NewSegment 方法。 速率變更之後,它應該據以調整其時間戳。 因為速率變更前面有搜尋,所以時間戳會從零重新啟動,因此篩選條件可以直接除以速率來計算新的時間戳。
譯碼器篩選: 譯碼器不應該在呼叫上採取 SetRate
動作,而不是在上游傳遞它們。 相反地,他們應該回應上游剖析器所發出的 NewSegment 呼叫。 當譯碼器篩選收到新的區段資訊時,應該儲存值並傳遞 NewSegment 呼叫下游。 某些譯碼器需要藉由插補輸入來產生額外的時間戳;他們應該在這麼做時將速率變更納入考慮。
轉譯器: 視訊轉譯器通常可以忽略速率變更,因為傳入的畫面已經有正確的時間戳。 音訊轉譯器必須修改其播放速率,因為音訊譯碼器通常不會進行速率變更轉換。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | strmif.h (包含 Dshow.h) |
程式庫 | Strmiids.lib |