具有多個資料流程的 VMR (混合模式)

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。

VMR 可以轉譯多個輸入資料流程。 在此設定中,稱為混合模式,VMR 會載入其混合器和組合器,以在轉譯之前執行混合和混合。 當 VMR 處於視窗模式或無視窗模式時,可以使用混合模式。

混合模式需要圖形驅動程式支援DDCAPS_BLTFOURCC和DDCAPS_BLTSTRETCH功能旗標,分別 (色彩空間轉換和延展) 。 幾乎所有新的圖形驅動程式都有這些功能。 此外,驅動程式必須支援建立目前顯示圖元深度的 Direct3D 轉譯目標。 當顯示器設定為每個圖元 24 位時,某些裝置不支援 Direct3D 作業。 如需詳細資訊,請參閱 DirectX 圖形 SDK 檔。

注意

當 VMR 混合多個視訊串流時,篩選圖表不會正確搜尋。 如果您需要搜尋多個視訊串流,您必須建立共用相同自訂配置器簡報者物件的個別篩選圖表。

 

設定多個資料流程的 VMR-7

若要使用 VMR-7 轉譯多個輸入資料流程,請執行下列動作:

  1. 在連接任何 VMR 的輸入針腳之前,請使用資料流程數目呼叫 IVMRFilterConfig::SetNumberOfStreams 方法。 這會導致 VMR 載入混音器和組合器,並建立指定的輸入針腳數目。
  2. 呼叫 IVMRFilterConfig::SetRenderingPrefs 以指定各種轉譯喜好設定。
  3. 將針腳連接到上游篩選器。 若要這樣做,最簡單的方式是為每個輸入資料流程呼叫 IGraphBuilder::RenderFile 。 如果上游篩選器上的輸出針腳 (通常是解碼器) ,且 VMR 上的輸入針腳無法同意連線,則會建立具有預設設定的新 VMR 實例。 這會導致標題列中有 「ActiveMovie」 的新視窗。 若要避免發生這種情況,應用程式應該一律藉由呼叫 IPin::ConnectedTo之類的方法來確認正在使用正確的 VMR 實例。 另一個選項是新增來源篩選,然後使用 IGraphBuilder::Connect連接針腳。
  4. 使用 VMR 上的 IVMRMixerControl 介面來控制每個資料流程的參數,例如 Alpha 值、Z 順序和輸出矩形。
  5. 執行篩選圖表。

設定多個資料流程的 VMR-9

根據預設,VMR-9 會建立四個輸入針腳。 如果您想要混合四個以上的視訊串流,請先呼叫 IVMRFilterConfig9::SetNumberOfStreams ,再連接任何輸入針腳。 使用 IVMRMixerControl9 介面來設定資料流程參數,例如 Alpha、Z 順序和位置。

使用 VMR 混合模式