關於媒體範例和配置器
[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
篩選會跨釘選連線傳遞資料。 資料會從一個篩選的輸出針腳移至另一個篩選的輸入針腳。 輸出針腳傳遞資料最常見的方式,是在輸入上呼叫 IMemInputPin::Receive 方法,雖然也有一些其他機制存在。
視篩選而定,媒體資料的記憶體可以透過各種方式配置:在堆積、DirectDraw 介面、使用共用 GDI 記憶體,或使用一些其他配置機制。 負責配置記憶體的物件稱為 配置器,這是公開 IMemAllocator 介面的 COM 物件。
當兩個針腳連接時,其中一個針腳必須提供配置器。 DirectShow 會定義一連串的方法呼叫,用來建立哪一個針腳提供配置器。 針腳也會同意配置器將建立的緩衝區數目,以及緩衝區的大小。
串流開始之前,配置器會建立緩衝區集區。 在串流期間,上游篩選會填入資料緩衝區,並將其傳遞至下游篩選。 但上游篩選不會提供緩衝區的下游篩選原始指標。 相反地,它會使用稱為 媒體範例的 COM 物件,配置器會建立此物件來管理緩衝區。 媒體範例會公開 IMediaSample 介面。 媒體範例包含:
- 基礎緩衝區的指標
- 時間戳記
- 各種旗標
- 選擇性的媒體類型
時間戳記會定義呈現時間,轉譯器篩選用來排程轉譯。 旗標會指出資料自上一個範例以來是否有中斷。 媒體類型提供一種方式,讓篩選準則變更中間資料流程格式。 範例通常沒有媒體類型,這表示自上一個範例以來的格式尚未變更。
篩選準則使用緩衝區時,它會保留樣本的參考計數。 配置器會使用參考計數來判斷何時可以重複使用緩衝區。 這可防止篩選覆寫另一個篩選仍在使用的緩衝區。 範例不會回到配置器的可用樣本集區,直到每個篩選準則都釋放為止。
如需詳細資訊,請參閱下列主題:
- 範例和配置器主題提供配置器運作方式的更詳細描述。
- Filter Graph 中的資料流程主題提供 DirectShow 中資料流程的一般概觀。
下列主題適用于撰寫自己的自訂篩選的開發人員:
相關主題