使用 DirectShow EVR 篩選
[此頁面所述的元件, 增強的視訊轉譯器是舊版功能。 它已被透過 MediaPlayer 和 IMFMediaEngine 元件公開的簡單視頻轉譯器(SVR)所取代。 若要播放視訊內容,您應該將數據傳送到其中一個元件,並允許它們具現化新的視訊轉譯器。 這些元件已針對 Windows 10 和 Windows 11 優化。 Microsoft 強烈建議新程式代碼盡可能使用 MediaPlayer 或較低層級 的 IMFMediaEngine API 在 Windows 中播放視訊媒體,而不是 EVR。 Microsoft 建議將使用舊版 API 的現有程式代碼重寫為盡可能使用新的 API。]
若要建立增強的視訊轉譯器 (EVR) 篩選,請呼叫 CoCreateInstance。 CLSID CLSID_EnhancedVideoRenderer,定義於 uuids.h 中。 您不需要呼叫 MFStartup 或 MFShutdown,即可使用 EVR 篩選器。
如需在 DirectShow 應用程式中使用 EVR 篩選器的詳細資訊,請參閱 DirectShow 中的音訊/視訊播放。
EVR 篩選條件會以一個輸入針腳開頭,對應至參考數據流。 若要新增子數據流的釘選,請查詢 IEVRFilterConfig 介面的篩選,並呼叫 IEVRFilterConfig::SetNumberOfStreams。 連接任何輸入針腳之前,請先呼叫此方法。 針腳 0 一律是參考數據流。 連線 任何其他針腳之前,此針腳,因為參考數據流的格式可能會限制可用的子數據流格式。
開始圖形之前,請先設定視訊剪輯視窗和目的矩形。 如需詳細資訊,請參閱 使用影片顯示控件。
不同於視訊混合轉譯器(VMR),EVR 沒有操作模式(視窗化、無視窗等等)。 特別是:
- EVR 不支持視窗模式。 應用程式必須提供裁剪視窗。
- EVR 沒有無轉譯模式。 若要取代預設演示者,請呼叫IMFVideoRenderer::InitializeRenderer。
- EVR 沒有混合模式。 EVR 一律會建立混音器。 如果您有一個輸入數據流,就不需要呼叫 SetNumberOfStreams 來強制 EVR 使用混音器。
篩選介面
EVR 篩選器會公開下列介面。 這些介面中有一些記載於 DirectShow SDK 中。 使用 QueryInterface 來擷取這些介面的指標:
- IAMCertifiedOutputProtection (DirectShow)
- IAMFilterMiscFlags (DirectShow)
- IBaseFilter (DirectShow)
- IEVRFilterConfig
- IKsPropertySet (DirectShow)
- IMediaEventSink (DirectShow)
- IMFGetService
- IMFVideoPositionMapper
- IMFVideoRenderer
- IPersistStream
- IQualityControl (DirectShow)
- IQualProp (DirectShow)
- ISpecifyPropertyPages
輸入釘選介面
EVR 篩選器上的輸入針腳會公開下列介面。 使用 QueryInterface 來擷取這些介面的指標:
- IEVRVideoStreamControl
- IMemInputPin (DirectShow)
- IMFGetService
- IPin (DirectShow)
- IQualityControl (DirectShow)
此外,您可以使用 IMFGetService 介面來擷取下列介面:
相關主題