有人致力于将屏幕捕获为视频流(存储在本地文件中或发送到网络)吗?
我了解如何做到这一点,并且有多个测试解决方案正在运行 - 但我们很难实现良好的性能。我们需要在 CPU 已经被大量使用的计算机上捕获大约 4 兆像素的屏幕空间,其中包含不断变化的文本和矢量图形。
通过将未压缩的 BMP 帧发送到网络可以实现可接受的(尽管远未达到预期)性能,但出于多种原因,至少进行一些现场压缩很重要。
关于如何使用尽可能少的处理能力进行编码的任何建议:可能是一个非常快的编解码器?或者一些避免在内存中复制图像的技巧?使用 DirectX 捕获屏幕(大部分屏幕在 WPF 中)值得做吗?
最佳答案
好吧...这是一个疯狂的猜测,因为我从未尝试过...但它似乎是合理的。我认为你应该使用 Nvidia CUDA。例如:
我想你可以从图像(在内存中)创建纹理,然后压缩它。在CUDA SDK中有一个sample for DirectX Texture Compressor (DXTC):
High Quality DXT Compression using CUDA. This example shows how to implement an existing computationally-intensive CPU compression algorithm in parallel on the GPU, and obtain an order of magnitude performance improvement.
您可以在内存中存储多个纹理(取决于视频内存量),并将它们写入另一个线程上的磁盘/套接字。
这只是一个建议...我认为最好的方法是使用 CUDA 实现编码算法(参见 TMPGEnc )将负载从 CPU 转移到 GPU,但这很棘手并且需要大量工作。
关于wpf - 快速屏幕捕获和视频录制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1361187/