我使用Windows Media Format SDK實時捕獲桌面並將其保存在WMV文件中(實際上這是我的項目過於簡單化了,但這是相關部分)。對於編碼,我使用的是Windows Media Video 9 Screen編解碼器,因爲它對於屏幕截圖非常高效,並且因爲幾乎每個人都可以使用它,而無需安裝任何東西,因爲編解碼器包含在Windows Media Player 9運行時(包含在Windows XP SP1中) 。使用Windows Media Format(WMF)捕獲桌面
我正在使用GDI函數進行BITMAP屏幕截圖,並將這些BITMAPs提供給編碼器。正如你所猜測的那樣,用GDI進行屏幕截圖很慢,而且我沒有得到屏幕光標,我必須手動添加到BITMAP中。我最初得到的BITMAP是DDB,我需要將它們轉換爲DIB才能理解(RGB輸入),這需要更多時間。
觸發一個分析器顯示大約50%的時間花在編碼器WMVCORE.DLL中。這是可以預料的,當然編碼是CPU密集型的。
問題是,有一種叫做Windows Media Encoder的SDK,它可以使用所需的編解碼器以更簡單,更友善的方式執行屏幕截圖。
WME基於WMF。這是一個更高槓杆庫,也有.NET綁定。我不能在我的項目中使用它,因爲這帶來了我不得不避免的不需要的依賴關係。
我在問WME用於將採樣數據提供給WMV編碼器的方法。 WME的編碼與使用WMF的應用程序完全相同。 WME比我的應用程序更高效,因爲它具有更高效的將視頻數據提供給編碼器的方式。它不依賴於緩慢的GDI函數和DDB-> DIB轉換。
它是如何完成的?
我想你正在考慮Windows圖元文件,這與Windows Media Format(一個音頻/視頻編碼器)不是一回事。 – jeffm 2008-10-07 14:53:20