learn-1 DXGI实现屏幕共享

文章介绍了多种实现屏幕共享的技术,包括WindowsGDI、DXGI、DWM、MagnificationAPI和WGCAPI。最终,项目选择了DXGI的WindowsDesktopDuplicationAPI作为实现屏幕共享的方法,因其在Direct3D10之后被引入并持续更新,适合此类应用。
摘要由CSDN通过智能技术生成

2023年5月18日16:30:56

第一次接触windows窗体,学习dx之路。

------------------------------------------------

能实现屏幕共享的技术有很多,

  • Windows GDI:这是 Windows 系统上兼容性最好的一套方案,从  Windows 2000 开始就有,现在还在继续提供服务,效率也还不错,部分接口底层支持了硬件加速功能,至于缺点我们后面叙述。

  • Microsoft DirectX Graphics Infrastructure(DXGI):这套 API 是为了封装不同版本 DirectX 部分接口而出现的,首次出现是在 Direct 3D 10,现在还在更新。本文关注的是 DirectX 提供的显示器数据抓取技术。

  • DWM:这项技术是微软在 Vista 上,为了提高桌面窗口显示效果而提供的一套 API,其基本思路是:改变过去直接绘制窗口到屏幕的做法,在视频内存中开辟一块离屏渲染区域,用来做各种像素处理,之后再交给屏幕显示,以此实现 Vista 有的毛玻璃效果,以及按下窗口键 +Tab 键来做桌面窗口切换时的 3D 转化效果等。通过这套 API 我们可以实现窗口缩略图的渲染,在 Windows 7 上,DWM 可以通过切换系统主题来控制其打开和关闭,即 Aero 主题。从 Windows 8 开始,系统默认都是打开 DWM 。这套 API 一般可以用来获取目标窗口的缩略图(thumbnail,支持动态更新),用来分享画面的话,分辨率偏低,不太能满足需求。

  • Magnification API:我们姑且称之为“放大镜 API”,这个是 Windows 上预装的放大镜程序底层使用的技术,我们正好可以利用这个技术,同时还可以实现窗口过滤功能。这套 API 也是目前兼容范围较广,各类 App 使用最多的窗口显示数据抓取技术,我们后面会详细分析。

  • Windows Grapics Capture(WGC API):微软最新提供的一套正式用来抓取屏幕数据的接口,遗憾的是最初是给 UWP 提供的,而非 Win32 App,且要求必须是 Windows 10, Update (1809) 及之后的系统才支持,但是官方提供的,我们也要予以足够的重视。

  • Windows Media API,以及各种 hook 技术 …… 可用范围较窄,因此这里不讨论。

  • 技术干货 | 桌面端屏幕分享实践 - 脉脉 (maimai.cn)

针对于项目需要,最后选择了DXGI来实现屏幕共享。参考的是

GitHub - bmharper/WindowsDesktopDuplicationSample: Simple sample code for Windows Desktop Duplication API

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值