2016-08-01 154 views
5

我負責修改使用DirectShow進行視頻渲染的應用程序。舊的應用程序工作正常,但它開始顯示年齡。DirectShow,Media Foundation,DXVA,什麼?

由於我有一個遊戲背景,我想我應該這樣做。在使用不同的技術製作了一堆原型之後,我很確定我可以從視頻到紋理的渲染,並使用DirectX來滿足他所有的客戶請求。

不過,我現在在我要挑一個技術一起去,我不能更失去了點...

  • 的DirectShow
  • 媒體基金會
    • 媒體會話(<的Windows 8)
    • 媒體引擎(> Windows 8中)
  • DXVA1
  • DXVA2
  • DXVA-HD

DirectShow是明顯的最古老的,但仍然非常有效,可用的編解碼器的巨量也主要是因爲。

Media Foundation已經與Windows Vista一起推出,並且在Windows 8之前有一些名爲「媒體會話」的內容,之後他們推出了「媒體引擎」。 如果我是正確的編解碼器被稱爲MFTs?實際上有哪些網站可以像free-codecs.com那樣獲得?

除了這兩種技術之外,還有DXVA,它允許您將視頻解碼卸載到GPU。目前,我遇到了3種不同的類型。 DXVA1是自XP以來的一個實現,DXVA2是更新的API。 但什麼是DXVA-HD?它是否比DXVA2更新還是它是一個相同的名稱?

我真的想要邁向媒體基金會,開箱即用的編解碼器可以很好地與客戶端使用的格式一起工作。我所關心的是爲它獲取編解碼器是多麼容易...... Windows 8+默認媒體播放器是否仍具有DirectShow和MF渲染路徑,並且即時交換它們,或者微軟是否完全停止DirectShow?

我也不能完全理解DXVA應該如何工作。鑑於我想基本渲染遊戲中的視頻,只有在GPU上實現所有渲染並將應用程序邏輯保存在CPU上纔有意義,但我無法找到任何有關如何使用Media基礎。這主要是由於我不知道DXVA2和DXVA-HD之間的區別。 Windows 7 SDK附帶了所有3種實現的示例...

如果有人能以粗體回答我的問題,請糾正我的錯誤信息,並指出我正確使用示例的方向(DirectX + Media Foundation + DXVA-無論如何),我會很感激!它可以像「將Windows 7 SDK的這三個示例組合起來以獲得所需內容」一樣簡單。

整個任務的目標是再次獲得拔尖的形式應用程序,我想絕對相信我挑,將持續在未來十年一樣的DirectShow已經擁有的技術:P

回答

6

如果我是正確的編解碼器被稱爲MFTs?實際上有哪些網站可以像free-codecs.com那樣獲得?

編解碼器通常是從壓縮格式解壓縮到未壓縮(解碼器)或反之亦然(編碼器)的軟件項目。這兩種API都不是使用完全的編解碼器,而是爲具有輸入和輸出的組件定義一個通用接口,例如, DirectShow中的過濾器,DirectX媒體對象(DMO)或其演進 - 媒體基礎轉換(MFT)。

MFT是Media Foundation的基礎組件:編碼器,解碼器,效果器,縮放器,視頻捕獲設備 - 所有內部都有MFT,而更高層次的API構建於其上。

由於媒體基金會對整體第三方MFT的興趣有限,這是罕見的事情。儘管您可以在DirectShow過濾器外形中找到幾乎任何東西,但Media Foundation和MFT並非如此。

但什麼是DXVA-HD?它是否比DXVA2更新還是它是一個相同的名稱?

DXVA-HD是DXVA 2.0系列API的一部分,涵蓋硬件加速視頻處理。作爲公共底層接口可用,它也集成在DirectShow和Media Foundation庫存組件中。

Windows 8+默認媒體播放器是否仍然具有DirectShow和MF渲染路徑並將它們即時交換,或者微軟是否完全停用了DirectShow?

是的,WMP 12仍然有兩個。 Windows 10電影&電視播放器僅限MF。

鑑於我想基本上呈現一個遊戲裏面的視頻,這隻會使意義,使所有的渲染實際發生的GPU,並保持應用程序邏輯CPU上,但我真的不能找到任何很好的例子如何使用Media Foundation來使用它。

DirectShow和Media Foundation都提供支持DXVA的股票解碼器(主要用於H.264,但不僅限於此)。我會說DirectShow的實現相當不靈活,並且打算與EVR一起使用。 Media Foundation的實現更加靈活,可以在MF流水線之外用作MFT。但是,它們都隱藏了所有的複雜性,並在幕後自動利用DXVA解碼。

...我想絕對相信我挑,將持續在未來十年一樣的DirectShow已經

DirectShow是還在這裏作爲一個傳統的API技術,以更大手筆發售在樣本,代碼,公共信息,文檔,第三方可擴展性。媒體基金會是一個預期中的替代品,對其非常有限的興趣。與DirectShow相比,它基本上沒有提供太多的功能,微軟並沒有開發它來覆蓋DirectShow的功能集 - 通常來自新API的預期功能,並沒有提供有用的開發工具。它看起來就像是假設MF的是一個新的東西應該賣掉它自身,但最終還是沒有解決:

... The miracle of DirectShow is that, even though it was written in 1995, that original code still supports the many wild and varied multimedia formats that have been developed since. The latest baseclasses update I'm aware of is from 2009, in the Windows 7 SDK, but even that has only minor modifications from the original release.

[...]

但是要記住,即使在7年前,DirectShow已經有15年曆史了。基礎類從一開始就以源代碼形式發佈。他們已經有超過二十年的關注程序員的關注。這些問題很久以前就被解決了。

[...]

現在,說了這麼多,這是真的,在微軟的鄉親考慮的DirectShow是一個死技術。他們已經轉移到媒體基金會,原因完全逃脫了我。我還沒有找到媒體基金會比DirectShow更好解決的問題。它固有的限制意味着它存在一些它無法解決的問題。我永遠不會明白他們爲什麼選擇重新開始,而不是在DShow中修補任何他們不喜歡的東西。基本概念是完全相同的,儘管詞彙有所不同。這只是浪費資源。

+0

首先,感謝您的廣泛答覆,真的很有幫助! 「然而,他們都隱藏了所有的複雜性,並在幕後自動利用DXVA解碼。」 >我是否還需要告訴MediaEngine或其他什麼才能真正使用它,或者當解碼器支持它時它是否會自動發生(如果是這樣,很好奇,我怎麼能告訴它禁用它 - 我很難找到它) ?至於你最後的評論:你是否建議堅持使用DirectShow,並只是給予渲染到紋理處理,還是繼續移動到MF上? –

+0

'1'它是自動的;使用DirectShow在解碼器上使用ICodecAPI將其禁用,如[文檔](此處)(https://msdn.microsoft.com/en-us/library/windows/desktop/dd390679)和媒體基金會那裏記錄的那樣, (https://msdn.microsoft.com/en-us/library/windows/desktop/dd797815)'2'在硬件解碼器的幫助下將H.264渲染到紋理中我將採用Media Foundation。 –

+0

我的印象是,它也有可能在設備上設置一些創建參數,以便完全禁用(或啓用)DXVA--相關應用程序必須呈現大量類型,從H.264 MP4到WMV以及我不提前知道的AVI? –

相關問題