【问题标题】:Fast screen capture and lost Vsync快速截屏和丢失 Vsync
【发布时间】:2010-05-11 22:21:06
【问题描述】:

我想用一个自制的应用程序实时生成一部电影,该应用程序通过正在运行的 3D 应用程序占用部分屏幕进行快速截屏。

我知道为此已经存在多个应用程序(例如 FRAPS 或 Taksi),甚至专用的 DirectShow 过滤器(例如 UScreenCapture),但我确实需要使用我自己的外部应用程序来实现。

如果设置正确(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 消耗以进行实时 30 fps 采集(至少在 windows XP 下,在 7 下不确定)

我的问题是,是否有办法使用 Windows 7 实现我的目标,它是全新的 DirectX 合成引擎?

Windows 7 成功地显示每个应用程序的实时 VSync 重复预览(在任务栏中),因此必须有一种方法可以访问当前显示的屏幕缓冲区,而不会干扰 3D OpenGL 应用程序的渲染?

任何其他建议,技术? 谢谢

【问题讨论】:

  • 你是如何使用 ffmpeg 的?

标签: windows-7 directshow screenshot capture vsync


【解决方案1】:

我列出了可能有用的链接

http://betterlogic.com/roger/?p=3037

如果你有任何成功,请告诉我——最终我也会对 Windows 的快速开源屏幕截图感兴趣......

相关:Fastest method of screen capturing

【讨论】:

    猜你喜欢
    • 2017-02-27
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2018-11-13
    • 2015-04-06
    相关资源
    最近更新 更多