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之後平臺的截屏技術首選。ui

調用流程

  首先,這套接口是集成在DirextX之中的,因此更大部分DirectX接口的使用方式基本一致,也就是經過D3D,各類QueryInterface,各類Enum,核心方法,是AcquireNextFrame。先簡單說下流程。線程

  1. 建立D3DDevice
  2. 經過一系列接口獲取路徑,獲取到IDXGIOutputDuplication接口
  3. 調用AcquireNextFrame,獲取當前桌面數據,保存在IDXGIResource中
  4. 把數據從GPU映射到內存中
  5. 拷貝須要的數據到本身的buffer裏

  其中,獲取到IDXGIOutputDuplication接口,是經過以下路徑:
IDXGIDevice --> IDXGIAdapter --> IDXGIOutput --> IDXGIOutput1 --> IDXGIOutputDuplication3d

關鍵代碼

建立接口

獲取一幀桌面數據

截屏性能測試

  這裏把他跟傳統的使用GDI截屏技術,進行對比。程序只截取桌面數據,而後把數據保存到本身的內存buffer中,不作其餘操做。CPU有點差,若是是好點的cpu,性能數據應該是更好看,不過作對比仍是很明顯能看出來的。blog

  • CPU:i3-3120M,2.5GHZ,雙核四線程
  • 系統:Windows10
  • 內存:8GB

  

個人筆記本比較老了,因此GDI最多隻能跑到20幀了,不過能夠看到,即便這種狀況下,當不設置幀率,也就是無限循環截屏的狀況下,DXGI的性能只能用可怕來形容。。。接口

注意:上面最後表裏的DXGI幀率當時應該是統計錯誤,實際到達不了這麼高,不少是無效採集,可是有效採集的幀率也是很是高的,具體數據等我有時間了再作統計。(2019-03-22)內存

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++直播

haibindev.cnblogs.com,合做請聯繫QQ。(轉載請註明做者和出處~)io

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

相關文章
相關標籤/搜索