DXGI快速截屏录屏技术

简介: DXGI快速截屏录屏技术

DXGI快速截屏录屏技术

概述

  很多地方都需要用到截屏/录屏技术,比如桌面直播,桌面录制等等。在微软Windows平台,有很多截屏的接口,不过大多数性能并不理想,Windows8以后微软引入了一套新的接口,叫“Desktop Duplication API”,应用程序,可以通过这套API访问桌面数据。而由于Desktop Duplication API是通过Microsoft DirectX Graphics Infrastructure (DXGI)来提供桌面图像的,速度非常快。由于是通过GPU,所以cpu占用率很低,性能很高。

  还有一点有意思的是,Duplication API获取到的桌面数据,不管显示模式如何设置,都永远是32位RGBA数据,其实这样方便的多了,不用考虑其他可能的情况,比如24位等。

  综合来看,各方面秒杀GDI截屏技术,易用性上也比MirrorDriver技术好得多,是Windows8以后平台的截屏技术首选。

调用流程

  首先,这套接口是集成在DirextX之中的,所以更大部分DirectX接口的使用方式基本一致,也就是通过D3D,各种QueryInterface,各种Enum,核心方法,是AcquireNextFrame。先简单说下流程。

  1. 创建D3DDevice
  2. 通过一系列接口获取路径,获取到IDXGIOutputDuplication接口
  3. 调用AcquireNextFrame,获取当前桌面数据,保存在IDXGIResource中
  4. 把数据从GPU映射到内存中
  5. 拷贝需要的数据到自己的buffer里

  其中,获取到IDXGIOutputDuplication接口,是通过如下路径:

IDXGIDevice --> IDXGIAdapter --> IDXGIOutput --> IDXGIOutput1 --> IDXGIOutputDuplication

关键代码

创建接口

获取一帧桌面数据

截屏性能测试

  这里把他跟传统的使用GDI截屏技术,进行对比。程序只截取桌面数据,然后把数据保存到自己的内存buffer中,不做其他操作。CPU有点差,如果是好点的cpu,性能数据应该是更好看,不过做对比还是很明显能看出来的。

  • CPU:i3-3120M,2.5GHZ,双核四线程
  • 系统:Windows10
  • 内存:8GB

  

我的笔记本比较老了,所以GDI最多只能跑到20帧了,不过可以看到,即使这种情况下,当不设置帧率,也就是无限循环截屏的情况下,DXGI的性能只能用可怕来形容。。。

注意:上面最后表里的DXGI帧率当时应该是统计错误,实际到达不了这么高,很多是无效采集,但是有效采集的帧率也是非常高的,具体数据等我有时间了再做统计。(2019-03-22

目录
相关文章
|
15天前
|
机器人
XGO拍照功能
【9月更文挑战第04天】
23 1
|
4月前
|
定位技术
手机截屏
手机截屏
51 0
|
4月前
|
编解码
🖥️Electron实现录屏软件(二)——指定区域录制
🖥️Electron实现录屏软件(二)——指定区域录制
|
4月前
告别流氓播放器不让截屏,win10自带截屏快捷键
告别流氓播放器不让截屏,win10自带截屏快捷键
475 0
|
11月前
|
数据安全/隐私保护 Windows
实用分享-免费录屏工具(无水印)
实用分享-免费录屏工具(无水印)
|
Android开发
图标提取,一键完成,再也不用截屏抠图了!
图标提取,一键完成,再也不用截屏抠图了!
|
编解码
电脑录屏黑屏怎么回事 电脑录屏黑屏了还能录吗
在电脑录屏的过程中会出现很多问题,而黑屏是其中比较严重的一个问题,直接导致视频录制工作无效,所以在进行录屏时一定要注意黑屏的问题。那么,电脑录屏黑屏怎么回事,电脑录屏黑屏了还能录吗,今天就一起来分析这些问题。
588 0
|
移动开发 JavaScript
h5 实现调用系统拍照或者选择照片并预览
调用手机相机拍照或者是调用手机相册选择照片,这个功能在 手机端页面 或者 webApp 应该是常用到的,就拿个人或会员资料录入那块来说就已经是经常会碰到的, 每当看到这块功能的时候,前端的小伙伴就得去找各种各样的插件。
2972 0
|
存储 Python
asciinema终端录屏神器使用及过坑
在github上接触到asciinema,一个强大的神器。 它能够在linux等终端上进行录屏,并且录屏不生成视频文件,而是生成文字形式! 另外,它还能够将录制的结果上传到asciinema.org中进行播放,以及存储到本地。
3008 0