共用方式為


EVR 媒體類型交涉

[此頁面所述的元件, 增強的視訊轉譯器是舊版功能。 它已被透過 MediaPlayerIMFMediaEngine 元件公開的簡單視頻轉譯器(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 裝置是否支援該子數據流格式,以及針對參考數據流選取的轉譯目標格式。 因此,可用的子數據流格式可能會根據參考數據流而變更。

以下是更詳細的程式。 這些詳細數據對大多數應用程式並不重要,但如果您正在撰寫自定義混音器或演示者,可能會很有説明。

針對參考數據流,交涉會如下所示:

  1. EVR 會在混音器上呼叫 IMFTransform::SetInputType

  2. 混音器會使用 DXVA2_VideoDesc 結構,將媒體類型轉換成 DXVA 2.0 描述。

  3. 混音器會呼叫 IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids 以取得視訊處理器 GUID 的清單。

  4. 針對每個視訊處理器 GUID,混音器會呼叫 IDirectXVideoProcessorService::GetVideoProcessorRenderTargets 以取得支援的轉譯目標格式。

  5. EVR 會以MFVP_MESSAGE_INVALIDATEMEDIATYPE訊息在演示者上呼叫 IMFVideoPresenter::P rocessMessage 此訊息會導致演示者選取新的格式。

  6. 演示者會呼叫 IMFTransform::GetOutputAvailableType ,以從混音器取得可用的輸出格式清單。 混音器會從步驟 4 中取得的格式產生此清單。

  7. 演示者會選取格式,並在混音器上呼叫IMFTransform::SetOutputType

針對子數據流,程式更簡單:

  1. EVR 會在混音器上呼叫 IMFTransform::SetInputType

  2. 混音器會呼叫 IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats 以取得可用的子數據流格式清單。

  3. 如果建議的格式包含在這份清單中,EVR 會接受輸入類型。

增強式視訊轉譯器