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帧传输屏幕的需求。