【问题标题】:How does software like GotoMeeting capture an image of the desktop?GotoMeeting 之类的软件如何捕获桌面图像?
【发布时间】:2011-01-03 22:54:30
【问题描述】:

我想知道像 GotoMeeting 这样的软件如何捕获桌面。我可以使用 GDI 进行全屏(或逐块)捕获,但这对我来说似乎太浪费了。我也研究了镜像设备,但我想知道是否有更简单的技术或库可以做到这一点。

我需要快速高效的桌面屏幕捕获 (10p15 fps),我最终会将其转换为视频文件并与我的应用程序集成以通过网络或其他方式发送捕获的提要。

谢谢!

【问题讨论】:

    标签: windows video screen capture


    【解决方案1】:

    是的,截屏并找出前一次截屏之间的差异是一种减少传输带宽的好方法,只需发送更改即可,当然这类似于逐块执行此操作的视频编码技术。

    仍然意味着您需要进行捕获和额外处理以获得差异,即对其进行编码。

    【讨论】:

      【解决方案2】:

      通过使用 Mirror 设备,您可以获得更新的 Rectangle 以及指向屏幕的指针。更新后的 Rectangle 指针指向所有变化的矩形,这些矩形就是变化频繁的矩形。过滤掉一些矩形,因为在一秒钟内您可以获得 1000 个矩形。

      【讨论】:

        【解决方案3】:

        我会:

        • 进行全屏捕获,然后 执行图像处理以隔离 已更改的屏幕部分 以节省带宽。

        -或-

        【讨论】:

        • 全屏图像处理,嗯..我一直将图像隔离成块并寻找增量,但我想我并没有真正将其视为图像处理。这意味着我可以使用可编程 GPU 减轻 CPU 的负载并进行快速增量检测。太棒了。
        【解决方案4】:

        我使用内存驱动程序每秒获得 20 到 30 帧,我显示在我的图片框上,但是当我获得全屏更新时,这些帧被缓冲。由于图片框很慢并且已经更改了我自己的组件,这有点快,但在全屏时并不好,平均我在全屏时显示 10 fps。我在渲染帧时遇到问题,我每秒可以捕获 20 到 30 帧,但我的渲染是在一秒钟内 8 到 10 个全屏帧。如果有人有全屏渲染帧,请重播我。

        【讨论】:

          【解决方案5】:

          什么语言?

          .NET 提供Graphics.CopyFromScreen

          【讨论】:

          • 嗯,我想要一个语言中立的答案,更像是对技术的讨论,而不是 API 调用。 CopyFromScreen 会一点一点地进行传输,就像我提到的那样,这对我来说有点浪费。在功能不太强大的笔记本电脑上每秒执行 10 到 15 次此操作会使其引人注目或耗尽笔记本电脑的电池,或者两者兼而有之。所以需要一些更高效的东西。
          • 如果有更高效的方法,你不觉得.NET核心库会用吗?如果你想要一种“更有效”的方式,那就是不捕获屏幕本身。
          • 好吧,我并不是说 .NET CopyFromScreen 调用效率不高,我只是说对于我的具体情况,我认为它很浪费。我不想捕获整个屏幕只是为了确定屏幕根本没有改变。
          • 您可以进行一项优化,看看自上次屏幕截图以来是否有任何鼠标移动或键盘事件。如果没有,则不要再次捕获。除非这对任何更新自己的窗口都没有帮助,无论输入如何,即动画、视频等。
          猜你喜欢
          • 2023-04-08
          • 1970-01-01
          • 2013-08-03
          • 2011-04-27
          • 2021-10-22
          • 1970-01-01
          • 1970-01-01
          • 2016-03-31
          • 1970-01-01
          相关资源
          最近更新 更多