1. 程式人生 > >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的效能只能用可怕來形容。。。

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

在這裡插入圖片描述合作請聯絡QQ。(轉載請註明作者和出處~)

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