EVR 媒體類型交涉
[此頁面所述的元件, 增強的視訊轉譯器是舊版功能。 它已被透過 MediaPlayer 和 IMFMediaEngine 元件公開的簡單視頻轉譯器(SVR)所取代。 若要播放視訊內容,您應該將數據傳送到其中一個元件,並允許它們具現化新的視訊轉譯器。 這些元件已針對 Windows 10 和 Windows 11 優化。 Microsoft 強烈建議新程式代碼盡可能使用 MediaPlayer 或較低層級 的 IMFMediaEngine API 在 Windows 中播放視訊媒體,而不是 EVR。 Microsoft 建議將使用舊版 API 的現有程式代碼重寫為盡可能使用新的 API。]
本主題描述增強式視訊轉譯器 (EVR) 如何驗證媒體類型。
針對 DirectShow EVR 篩選條件,當篩選的針腳連接時,就會發生類型交涉。
針對EVR媒體接收,媒體類型是透過 數據流接收上的IMFMediaTypeHandler 介面來設定。 拓撲載入器通常會交涉媒體類型,不過應用程式也可以直接設定媒體類型。
EVR 不會報告任何慣用媒體類型。 用戶端必須測試媒體類型,直到找到可接受的類型為止。 必須先設定參考數據流的媒體類型,才能在任何子數據流上設定類型。
針對參考數據流,EVR 混音器會取得相容的 DirectX 影片加速 (DXVA) 轉譯目標格式清單。 EVR 演示者會使用此列表來選取 Direct3D 交換鏈結的格式。 如果找不到相容的轉譯目標格式,EVR 會拒絕媒體類型。
針對子數據流,EVR 混音器會查詢 DXVA 裝置是否支援該子數據流格式,以及針對參考數據流選取的轉譯目標格式。 因此,可用的子數據流格式可能會根據參考數據流而變更。
以下是更詳細的程式。 這些詳細數據對大多數應用程式並不重要,但如果您正在撰寫自定義混音器或演示者,可能會很有説明。
針對參考數據流,交涉會如下所示:
EVR 會在混音器上呼叫 IMFTransform::SetInputType。
混音器會使用 DXVA2_VideoDesc 結構,將媒體類型轉換成 DXVA 2.0 描述。
混音器會呼叫 IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids 以取得視訊處理器 GUID 的清單。
針對每個視訊處理器 GUID,混音器會呼叫 IDirectXVideoProcessorService::GetVideoProcessorRenderTargets 以取得支援的轉譯目標格式。
EVR 會以MFVP_MESSAGE_INVALIDATEMEDIATYPE訊息在演示者上呼叫 IMFVideoPresenter::P rocessMessage。 此訊息會導致演示者選取新的格式。
演示者會呼叫 IMFTransform::GetOutputAvailableType ,以從混音器取得可用的輸出格式清單。 混音器會從步驟 4 中取得的格式產生此清單。
演示者會選取格式,並在混音器上呼叫IMFTransform::SetOutputType。
針對子數據流,程式更簡單:
EVR 會在混音器上呼叫 IMFTransform::SetInputType。
混音器會呼叫 IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats 以取得可用的子數據流格式清單。
如果建議的格式包含在這份清單中,EVR 會接受輸入類型。
相關主題