代码之家  ›  专栏  ›  技术社区  ›  ima

快速屏幕捕获和视频录制

  •  1
  • ima  · 技术社区  · 16 年前

    是否有人曾致力于将屏幕捕获到视频流(存储在本地文件或发送到网络)?

    通过将未压缩的BMP帧发送到网络,可以获得可接受的(尽管远未达到预期)性能,但出于许多原因,至少一些现场压缩是重要的。

    关于如何使用尽可能少的处理能力进行编码的任何建议:可能是一个非常快的编解码器?还是一些避免在内存中复制图像的技巧?用DirectX捕获屏幕(大部分屏幕都是WPF)值得吗?

    4 回复  |  直到 16 年前
        1
  •  2
  •   Ionut Anghelcovici Ionut Anghelcovici    16 年前

    好啊这是一个疯狂的猜测,因为我从未尝试过。。。但这似乎是有道理的。我认为你应该使用英伟达CUDA。例如:

    我想你可以从图像中创建纹理(在内存中),然后压缩它。在CUDA SDK中有一个 sample for DirectX Texture Compressor (DXTC):

    使用CUDA进行高质量DXT压缩。此示例演示如何在GPU上并行实现现有的计算密集型CPU压缩算法,并获得一个数量级的性能改进。

    您可以在内存中存储一些纹理(取决于视频内存的大小),然后将它们写入另一个线程上的磁盘/套接字。

    这只是一个建议。。。我认为最好的方法是实现编码算法(参见 TMPGEnc )使用CUDA将负载从CPU移动到GPU,但这很棘手,需要大量工作。

        2
  •  1
  •   castlec    16 年前

    我在搜索CUDA和屏幕截图时遇到了这个问题,我想我应该添加我的经验。过去我使用VNC和FFMPEG创建了一个解决方案。如果你看一下VNC协议,你会发现它使用一个新的映像进行基于delta窗口的传输。基本上,上一个屏幕+更改=新屏幕。唯一需要传递的是变化。你会发现很多技巧来最小化传输成本,还有很多不同的有效负载扩展来传输数据,这是一个很好的资源,即使你决定利用所获得的知识来使用自己的资源。一旦我们使用VNC移动像素数据,我们发现原始像素数据比jpeg数据对cpu来说更昂贵,因为缓冲区拷贝比压缩更昂贵。

        3
  •  0
  •   user162315    16 年前

        4
  •  0
  •   rogerdpack    14 年前

    对于我来说,使用ffmpeg+directshow屏幕捕获 device

    推荐文章