我的应用程序正在捕获桌面屏幕(屏幕共享)并发送到其他设备。
目前应用程序使用以下方法捕获屏幕
- 使用GDI(Bitblt)
- 使用DirectX(getFrontBufferData)
- 使用DXGI(桌面复制API)
根据Windows版本和用例,应用程序使用其中一个。
我正在寻找硬件加速api,它比现有的实现更快地完成这项工作。作为参考,我们在Mac OS click here中有一些东西。
在Windows中搜索硬件加速屏幕捕获后,找到以下一些选项:
- 基于GDI的捕获
- 它是一个常用的软件捕获库,它支持Windows 7中的硬件加速
- 基于Directx的捕获
- 一些选项提出了以下参考文献中提到的direct3d9和direct3d11捕获。在directx方法中使用getfrontbufferData比gdi本身慢。
- 基于DXGI的捕获
- 它支持Windows 8和更高版本的Windows,它是我的应用程序中的direct3d11基础实现
- 基于Windows媒体编码器9的捕获
参考文献:http://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen和
Fastest method of screen capturing
但是这些引用看起来很旧,在最新版本的windows中是否有这样的功能。
我的应用程序中已经以某种方式使用了前三种方法。 DXGI在某些方面更好,因为它具有硬件加速(使用GPU) 我正在寻找一个类似于上部提到的mac应用程序的Windows应用程序/库。 我们的用例很容易以最佳方式捕获屏幕帧而不影响系统性能(我希望它只能通过使用GPU来实现,这将节省cpu周期)。