前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DXGI快速截屏桌面直播技术

DXGI快速截屏桌面直播技术

作者头像
hbstream
修改2018-08-20 10:17:59
3.7K0
修改2018-08-20 10:17:59
举报
文章被收录于专栏:海之滨云视频和流媒体技术

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的性能只能用可怕来形容。。。

haibindev.cnblogs.com,合作请联系QQ。(转载请注明作者和出处~)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DXGI快速截屏桌面直播技术
    • 概述
      • 调用流程
        • 关键代码
          • 创建接口
          • 获取一帧桌面数据
        • 截屏性能测试
        相关产品与服务
        云直播
        云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档