這將是我在查找解釋幾天後在StackOverflow中的第一個問題。請溫柔地問我,因爲我知道我的問題有點奇怪是一個普遍的問題。在C++中用Media Foundation&Windows 8捕獲問題
我製作了一個基於微軟示例'CaptureToFile'的MF捕捉視頻應用程序。它確實在Windows 7 x64上工作。我升級到Visual Studio 2013沒有問題。當我嘗試將所有開發放在Windows 8.1 x64機器上時出現問題。
該應用程序編譯和沒有錯誤執行,但它不能通過在異步模式下使用m_pReader-> ReadSample()捕獲樣本;只有前兩個樣本到達OnReadSample方法;並且必須有'控制'樣本,因爲IMFSample在它們全部爲空。之後,該應用程序被「吊死」等待數據。
我試過原來的MFCaptureToFile樣品,結果也一樣。
當然,我認爲硬件和軟件是類似(同採集卡使用相同的驅動程序版本,兩者都是臺式PC ...)
你知道這種行爲的任何可能的原因是什麼?在Win7中,一切都是無懈可擊的!或者至少,如果你能點燃我一點關於尋找新的路徑發生了什麼
在此先感謝
UPDATE:有在比賽中的另一個「玩家」。看看線程,我發現一個工作線程在'RTWorkQ.dll'中,實時工作隊列容器,只針對Windows 8。我將繼續調查。同時,如果您有任何想法和需要分享的內容,我很樂意聽到您的聲音。
更新2:我修改了示例MFCaptureToFile以同步獲取視頻樣本,因爲我認爲問題可能是由於異步行爲;與隊列有關。我必須說,即使在這種變化下,問題仍然存在。第二次嘗試閱讀樣本時,應用程序被「吊死」,等待閱讀不會永遠不會到來。
更新3:我試着用CaptureEngine示例應用程序使用另一種MF方式捕獲視頻(MFCaptureEngine)。它的構建和運行完美無瑕,但在開始「預覽」時不會顯示任何圖像,也不會記錄任何有用的,只有非可播放的文件。
更新4:我已經在Windows 8 PRO中安裝了Visual Studio 2010 Ultimate。示例中的示例MFCaptureToFile再次失敗。它無法從圖像採集卡中讀取第二個採樣。我開始認爲這可能是採集卡(Datapath VisionRGB-E1S)和Windows 8 PRO之間的不兼容,儘管驅動程序確保它在此平臺中正常工作,並且測試程序顯示圖像。明天我要用外置USB攝像頭進行測試。
維克,你發現了什麼新的東西?我正在開發一個虛擬的視頻驅動程序(基於Testcap樣品),並沒有在MediaFoundation工作了。現在我試圖調試從兩側的問題(內核模式驅動程序和Topoedit MF應用程序) - 沒有成功至今。的確,基於MediaFoundation應用程序的請求只有兩個首批樣品... – Dalamber