搜尋命令的時間格式
[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 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);
}
}
請注意,時間格式僅適用於搜尋命令。 它們不會影響圖形播放或其他動作。