wpf - 快速屏幕捕获和视频录制

标签 wpf video screenshot codec

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

我了解如何做到这一点,并且有多个测试解决方案正在运行 - 但我们很难实现良好的性能。我们需要在 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/

相关文章:

android - 在videoview中播放youtube视频

cocoa - 在 QTCapture 中设置分辨率?

wpf - 如何在设计时制作支持拖放的自定义 WPF ContentControl?

WPF DataGrid,Ctrl+C 后复制到剪贴板,OnCopyingRowClipboardContent

wpf - 使用参数将 WPF GridViewColumn 绑定(bind)到方法

android - getDrawingCache while NoTitleBar style set for the application in Android

c++ - 使用 WinApi 在 C++ 中仅显示 2 个监视器的多监视器屏幕截图

c# - 如何在 XAML 中的 'created' 代码隐藏中访问控制

javascript - html5 视频标签以在同一 div 中显示视频

delphi - 如何创建特定区域的屏幕截图?