2010-05-11 30 views
2

我想用自制應用程序實時生成電影,快速執行屏幕捕獲,部分屏幕由正在運行的3D應用程序佔用。我知道這個(如FRAPS或Taksi)已經存在幾個應用程序,甚至專用的DirectShow過濾器(如UScreenCapture),但我真的需要使用我自己的外部應用程序來做到這一點。快速的屏幕捕獲和丟失的Vsync

正確設置(UScreenCapture + ffdshow)時,捕獲全屏壓縮並不會佔用您期望的CPU(約15%),並且不會影響3D應用程序的性能。

從外部應用程序捕獲的問題是,3D應用程序失去了它的Vsync並創建了一個毛茸茸的難以使用的3D應用程序(3D應用程序只出現在屏幕的一小部分,其餘的是GDI ,DirectX)

FRAPS通過允許您一次只捕獲一個應用程序(焦點所在的應用程序)來解決此問題。根據所使用的技術(OpenGl,DirectX,GDI),它會掛鉤Vsync並捕獲(使用glReadPixels,...),而不會產生干擾。 這樣做並不能解決我的問題,因爲我想要完整的組合屏幕圖像(包括3D和其他)以及平滑的3D應用程序。

UScreenCapture似乎使用快速的DirectX調用來捕捉整個屏幕,但openGL 3D應用程序仍然不同步。

做一個BitBlt的速度太慢,CPU consumming做實時每秒30幀採集(至少在Windows XP中,不知道7)

我的問題是要知道是否有一種方法可以實現我的目標與Windows 7和它是全新的DirectX合成引擎?

Windows 7成功顯示每個應用程序(在任務欄中)的實時VSynced重複預覽,因此必須有一種方法可以訪問顯示的屏幕緩衝區而不會干擾3D OpenGL應用程序的渲染?

任何其他建議,技術? 謝謝

+0

你是怎麼用ffmpeg的呢? – rogerdpack 2011-07-19 20:23:27

回答