搜尋命令的時間格式
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
IMediaSeeking介面中的許多方法都有表示位置值的參數,例如目前位置或停止位置。 根據預設,這些參數會以 100 奈秒的單位表示,也稱為參考時間。 任何可搜尋的篩選準則都必須支援依參考時間搜尋。 有些篩選準則也可以使用其他時間單位來搜尋,例如搜尋特定框架編號,或搜尋資料流程內的指定位元組位移。 每個時間單位都會稱為時間格式,並由全域唯一識別碼定義 (GUID) 。 如需 DirectShow 所定義的時間格式清單,請參閱 時間格式 GUID。 協力廠商也可以定義自訂時間格式的 GUID。
若要判斷目前在篩選圖表中的篩選是否支援特定時間格式,請呼叫 IMediaSeeking::IsFormatSupported 方法。 如果支援格式,此方法會傳回S_OK。 否則,它會傳回S_FALSE或錯誤碼。 如果支援格式,您可以呼叫 IMediaSeeking::SetTimeFormat 方法,切換至該格式。 如果 SetTimeFormat 方法成功,後續的搜尋命令會使用新的時間格式來表示。
下列範例會檢查圖表是否支援依畫面編號搜尋。 如果是,它會搜尋框架編號 20:
hr = pSeek->IsFormatSupported(&TIME_FORMAT_FRAME);
if (hr == S_OK)
{
hr = pSeek->SetTimeFormat(&TIME_FORMAT_FRAME);
if (SUCCEEDED(hr))
{
// Seek to frame number 20.
LONGLONG rtNow = 20;
hr = pSeek->SetPositions(
&rtNow, AM_SEEKING_AbsolutePositioning,
0, AM_SEEKING_NoPositioning);
}
}
請注意,時間格式僅適用于搜尋命令。 它們不會影響圖形播放或其他動作。