1、屏幕捕捉
最簡單屏幕方式是用GDI截圖,然后把圖片保存到內存,留給下一步進行編碼。但該方式效率非常低,經過測試用GDI截圖的方式的屏幕共享不能超過25幀,再加上編碼的時間,幀數肯定不能超過20幀,因此GDI的截圖方式不能作為視頻會議軟件屏幕捕捉。另外一個方式用Direct3D方式,該方式需要需要Directx 9的支持,效果比GDI截圖好,但改善得不高。最后一種方式是DXGI方式,DXGI方式可以一秒超過幾千幀,因此DXGI方式最好的視頻會議的屏幕捕捉方式,但DXGI必須要Win8或者Win8以上才能支持,因此Win7和XP可以使用Direct3D方式。
2、屏幕編碼
屏幕編碼最簡單方式,可以采用H264(H265)視頻編碼直接編碼之前的屏幕捕捉的圖像,然后再通過H264(H265)硬件解碼進行解碼,最后通過Directx顯示出來,但該方式缺點是數據流量太大,一般會超過2Mb/s,這樣的話不太適合公網上傳輸,容易出現丟包。另外一種方式是VNC的屏幕分塊模式,分塊后采用視頻編碼的方式,如果分塊在兩個時間段不存在變化,就不需要傳遞這個分塊的變化,因此該方式極大改善了屏幕共享的數據流量,是開發視頻會議軟件的屏幕共享功能最好的方式。
總結,視頻會議軟件的屏幕共享最佳方式是采用DXGI進行屏幕的捕捉,而屏幕數據的編碼采用分塊的編碼技術,從而達到在低碼流的30幀傳輸屏幕的需求。