gpt4 book ai didi

c# - 以 window 8/10 技术无延迟地完全实时截屏

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:18:19 24 4
gpt4 key购买 nike

我将使用 C# 或 C++ 创建一个非常快速的实时远程服务,没关系,但目前我正在使用 c#。

好的,我正在寻找和要求的是一种以最快的形状实时捕获窗口屏幕的方法。

我知道互联网上已经有这些方法,但问题是延迟 ...

  • I used C# copyfromscreen and the delay was 92ms for 1920x1080 [ 5 frame in video ]
  • I used C# copyfromscreen with jpg encoder and delay was 36ms for 1920x1080
  • I used Unity3D screenCapture with jpg encoder and delay was 38ms for 1920x1080
  • I used C# Windows Desktop Duplication API and delay was 19ms for 1920x1080 [ 3 frame in video ]
  • I used C# Windows Desktop Duplication API with jpg encoder and delay was 12ms for 1920x1080 [ 2 frame in video ]
  • I used C++ Windows Desktop Duplication API with jpg encoder and delay was 9ms for 1920x1080 [ 2 frame in video ]
  • I used C# Windows DirectXCapture with jpg encoder and delay was 16ms for 1920x1080 [ 2 frame in video ]

我认为这种方式的进展是正常的,直到我检查了 Windows 10/8 任务栏实时预览缩略图并且它是完全实时的,没有 1 毫秒的延迟,这意味着帧到帧!

我尝试将所有方法的 1920 x 1080 大小调整为任务栏预览大小,但没有进行任何更改!

注意:该程序不能通过互联网处理,它可以在本地网络上运行。

我猜延迟是因为位图处理或其他原因,但我还不知道! [Times Added] 这是我在服务器上处理图片的方式:

private static byte[] capture()
{
Bitmap bmp = screenshot_DDAPI(); // Avarage Time : 29.6566ms
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Jpeg); // Avarage Time : 1.7101 ms
return ms.ToArray(); // Avarage Time : 3.032 ms
}

有谁知道windows用什么技术和方法把截图处理成任务栏实时缩略图的?

注意:如果这个问题与堆栈溢出无关或偏离主题,请告诉我我可以问哪个堆栈类别?

谢谢

最佳答案

桌面复制 API 是最快的 API。捕获延迟为零。

但是,在捕获之后,您会将原始纹理数据下载到系统 RAM 中,以供基于 CPU 的 jpeg 编码器使用。这就是花时间。实时缩略图不需要这样做,它们在 GPU 中缩放窗口纹理并使用 GPU 渲染它,当源数据已经在 VRAM 中时,两者都非常便宜。

如果您真的想最大限度地减少延迟,请寻找可以从 B8G8R8A8_UNORM D3D11 纹理获取源数据的基于 GPU 的 JPEG 编码器。 JPEG 占用的空间(因此带宽)比 RGBA 少得多,也就是说,您可能会更快地获得编码结果。

关于c# - 以 window 8/10 技术无延迟地完全实时截屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52930179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com