[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
本節說明 DMO 的整體架構。
數據流
DMO 是接受 m 輸入併產生 n 輸出的物件。 輸入和輸出稱為 數據流數據流。 每個 DMO 至少有一個數據流。 數據流不是物件;它們只會依索引編號在 DMO 上參考。 數據流數目在設計時間固定。
媒體類型
所有數據都是使用 媒體類型來輸入,其會定義如何解譯數據的內容。 例如,320 x 240 24 位 RGB 視訊是一種類型;44.1-kbhertz (kHz) 16 位立體聲 PCM 音訊是另一種類型。 媒體類型是使用 DMO_MEDIA_TYPE 結構來描述。 用戶端必須先設定 DMO 上每個數據流的媒體類型,用戶端才能處理任何數據。
一般而言,數據流可以接受各種媒體類型。 某些 DMO 支援比其他類型更廣泛的類型。 DMO 介面會定義用戶端的方法,以探索支援的型別。 例如,一個 DMO 可能會在任何位深度支援 RGB 視訊,而另一個則可能只支援 24 位 RGB。 此外,DMO 可能受限於輸入和輸出的特定組合。 例如,如果輸入類型是16位視訊,輸出數據流可能需要相同的位深度。 用戶端可以列舉每個數據流的慣用類型,然後測試特定組合。
緩衝區
在預設的 DMO 模型中,用戶端會配置不同的輸入緩衝區和輸出緩衝區。 它會以數據填滿輸入緩衝區,並將其傳遞至 DMO,而 DMO 會將新數據寫入輸出緩衝區。
選擇性地,DMO 可以支援「就地」處理。 使用就地處理時,DMO 會將輸出直接寫入輸入緩衝區,並透過原始數據。 就地處理可免除個別緩衝區的需求。 另一方面,它會改變原始數據,某些應用程式可能無法接受這些數據。
默認 (非就地)緩衝模型是透過 IMediaObject 介面支援。 所有 DMO 都必須實作這個介面。 如果 DMO 支援就地處理,它也會公開 IMediaObjectInPlace 介面。 用戶端負責配置所有緩衝區,包括輸入和輸出。
相關主題
-
關於 DMO 的