VMR 視窗化 (相容性) 模式
[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
VMR 的設計目的是要與所有現有的 DirectShow 應用程式相容。 當它與現有的應用程式搭配使用時,VMR 會以單一視訊串流在視窗模式中運作,也稱為相容性模式。 提供此模式的原因是 VMR-7 是 Windows XP 上的預設轉譯器,因此會自動用於呼叫 Intelligent Connect 方法,例如 IGraphBuilder::RenderFile。 如果您的應用程式使用 Intelligent Connect,而且只需要基本轉譯功能,您就不需要任何特殊程式碼才能在 Windows XP 上使用 VMR-7 正確轉譯。
根據預設,VMR-9 也會以視窗模式/相容性模式執行。 不過,VMR-9 絕不是預設視訊轉譯器。 若要在應用程式中使用 VMR-9,您必須明確地將它新增至篩選圖形。 基於這個理由,因為無視窗模式提供比視窗模式更好的功能,所以在視窗化/相容性模式中使用 VMR-9 沒有特別的優點。
在 Windowed/Compatibility 模式中使用 VMR-7
不需要特殊程式設計,才能在視窗化/相容性模式中設定或控制 VMR-7。 只要使用標準圖形建置呼叫來建置篩選圖形,VMR-7 就會預設為此模式。
在視窗化/相容性模式中,VMR-7 會建立自己的視窗來顯示影片。 若要這樣做,它會載入視窗管理員元件,這會公開 IVideoWindow 和 IBasicVideo 介面。 您的應用程式可以查詢篩選圖形管理員中的這些介面,就像使用舊的影片轉譯器篩選一樣。 如需詳細資訊,請參閱 使用視窗模式。
下圖顯示視窗化/相容性模式中的 VMR-7。
為了保證相容性的最大程度,視訊視窗的類別名稱與舊影片轉譯器篩選所建立的類別名稱相同,而舊影片轉譯器的大部分視窗管理員程式碼仍由 VMR 使用。 在視窗化/相容性模式中,VMR 不會耗用比舊影片轉譯器更多的系統資源。 由於 VMR-7 在視窗/相容性模式中只有一個輸入資料流程,因此不會載入其混音器或組合器元件。
根據預設,VMR 會延展影像以填滿視訊視窗。 若要保留來源的外觀比例,請使用 VMR_ARMODE_LETTER_BOX 旗標呼叫 IVMRAspectRatioControl::SetAspectRatioMode 方法。
注意
將視訊視窗放在子視窗中的 MFC 應用程式必須定義空的WM_ERASEBKGND訊息處理常式,否則影片顯示區域將無法正確重新繪製。
在視窗化/相容性模式中使用 VMR-7 搭配多個資料流程
在視窗化/相容性模式中,VMR-7 預設會建立單一輸入針腳,並停用混合模式。 若要啟用混合模式,您必須先設定 VMR,才能進行連線。 如需詳細資訊,請參閱 具有多個資料流程的 VMR (混合模式) 。 在混合模式中,VMR 會載入混合和組合器元件,這需要更多系統資源。
在視窗模式中使用 VMR-9
因為 VMR-9 不是預設轉譯器,所以它沒有相容性模式,因此。 相反地,VMR-9 預設為具有四個輸入針腳的視窗模式。 您可以使用此模式來混合最多四個視訊串流。 如果您需要混合大量的資料流程,您必須如 VMR 與多個 資料流程一起設定, (混合模式) 中所述。 否則,視窗模式中的 VMR-9 行為與視窗化/相容性模式中的 VMR-7 完全相同。