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)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

haibindev.cnblogs.com,合作請聯系QQ。(轉載請注明作者和出處~)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM