3.2 屏幕变化检测算法
屏幕变化检测算法性能的好坏将直接影响到VNC Server端发送的数据量,一种高效的屏幕检测算法将大大降低传输的数据量,节省网络带宽,从而提高系统的实时效果。VNC默认的屏幕变化检测机制是通过消息钩子机制获取区域的坐标信息后,再将坐标区域的屏幕像素数据发送给各VNC Client。此检测方法使得大量没有发生改变的屏幕数据也被发送,增加了网络发送的数据量,在低速网络环境中容易造成网络拥塞,影响系统的性能。因此,本文在此基础上提出了一种新的屏幕变化区域检测算法。
VNC机制通过采用消息钩子机制截获系统屏幕重绘区域信息,将得到的区域拆分成一个矩形链表(遍历链表)来存储区域坐标信息,记为array_list,定义一个变化区域记为vnc_rgn,专门保存需要重新发送的区域位置信息,对array_list每个成员矩形调用此检测算法进行变化区域检测。具体的算法流程图如图2所示。
(1)假设其中一个成员矩形为arri,如果arri的长宽都小于32×32,则直接作为需重新发送的变化区域,保存到vnc_rgn中,否则对arri进行分析检测。
(2)首先定义一个新的矩形arrj(arri.left,0,arri.right,0),在arri中找到发生变化的行,记录该行的y坐标,记arrj.top=y,同时y+=16递增找到未发生变化行,暂时记arrj.bottom=y;然后从arrj底部y-=1进行比较,寻找内容发生变化的行,找到后将此行的y坐标设置成arrj.bottom=y。至此确定了变化矩形arrj的最终的top、bottom坐标。同时将arri的值设为arri(arri.left,arrj.bottom,arri.right,arri.bottom)。在对arrj分析完毕后接着对arri遍历分析直至结束。
(3)确定矩形arrj后,对矩形arrj进行分析。首先定义一个矩形arrn(0,0,0,0),在arrj中寻找最先发生改变的列,找到后记录发生变化的区域的left、top坐标,arrn.left=x,arrn.top=y,分别对x、y轴方向循环遍历进行分析(记为x+=32,y+=32),如果此列屏幕像素数据改变,则x+=32继续比较;否则将记录arrn.right=x,对y轴方向进行同样的比较,y+=32,并记录arrn.bottom=y,最终得到需要发送的变化区域矩形坐标,并将此矩形保存到最终发送的矩形链表中,同时记录下arrk(arrn.right,arrn.top,arrj.right,arrn.bottom)、arrm(arrn.left,arrn.bottom,arrj.right,arrj.bottom),分别将arrk、arrm赋值给arrj进行类似分析检测,依次循环遍历整个arrj,直到结束。
通过此屏幕变化区域检测算法,对整个array_list链表的成员矩形进行遍历后得到需要重新发送的变化区域坐标信息。
4 实验结果
此改进方案已经应用于VcomOffice远程视频会议系统中。实验环境为:局域网内,中转服务器采用Linux操作系统,VNC Server和VNC Client端均采用Windows XP操作系统,具体的软硬件配置如表1所示。
为了验证调用屏幕变化区域检测算法前后,VNCServer端对同一操作生成的数据量的变化,实验在100 M的局域网内进行,VNC Server采用的是VNC默认的tight编码[5],编码后经过zlib压缩[5]后发送给中转服务器,主要进行以下场景的测试:
(1)打开一个Word文档,剪切、复制、粘贴一段文字,图片保存到Word,在Word中输入一些内容;
(2)打开IE浏览器登录www.sina.com.cn主页;
(3)打开一个PDF文档后,拖动滚动条至底部;
(4)打开资源管理器,在屏幕上做拖动操作,之后将其最大化。
调用检测算法前后VNC Server发送数据量如图3所示。通过对比可以看到,在调用屏幕区域变化检测算法前后,VNC Server端发送的数据量都会有一定程度的下降。当执行相同的Word操作时,VNC Server端发送的数据量降低了12.21%,登录新浪网主页的过程中数据发送量只降低了4.82%,打开PDF文档并拖动滚动条至最底端的过程中,发送的数据总量降低了14.63%,在资源管理器的缩放过程中,数据发送量下降了22.19%。
测试结果表时,当VNC系统调用屏幕区域变化检测算法后,VNC Server端的发送数据量平均会有10%左右的下降。这在远程多点应用程序共享中,会大大减轻VNC Server端的发送压力,减少网络拥塞现象出现的概率,从而提高了应用程序共享时远程客户端响应速度。
本文介绍了在低速网络环境下远程视频会议系统中通过VNC协议进行应用程序共享时存在的问题,提出了一种新的改进方案,并结合新方案提出了一种新的屏幕区域变化检测算法。此外,对系统在调用新的屏幕区域变化检测算法前后进行了测试比较。该方案已经应用于大连浩视数字技术有限公司的VcomOffice远程视频会议系统。通过多个实验场景的测试,实验结果表明,采用新的屏幕变化区域检测算法后,VNC Server端的发送数据量出现了较大程度的下降,为低速网络环境下远程视频会议系统节省了网络带宽,提高了应用程序共享系统的实时性,从而实现了VNC在低速网络环境下的应用,应用程序共享使地理位置分散的用户通过计算机网络的连接共享某一应用程序,在互联网办公、远程视频会议系统、远程协助等方面有着不可替代的作用,具有相当广阔的发展前景。