您现在的位置是:首页计算机网络论文

计算机科技论文屏幕共享方案研究与实现

发布时间:2014-09-23 13:39:51更新时间:2014-09-23 13:40:16 1

  屏幕共享是一个很早就有的想法,它最初是在1968年被Engelbart展示出来的[1],但当时的共享主要是通过硬件实现的。后来随着网络的发展,逐渐出现了软件实现的屏幕共享方式。相对于硬件实现方式,软件实现方式很大程度上降低了成本,同时降低了复杂度。

  摘 要: 针对远程教学中学生机端同步显示教师机端教学内容的需求,提出了一种基于Mirror Driver的教师机端屏幕共享解决方案。该方案基于教师机端对DirectDraw非高依赖和Mirror Driver能精确高效捕捉屏幕变化区域的特点,首先对教师机端屏幕高效捕捉;然后将捕捉的变化图像压缩成JPEG格式,通过网络传输到学生机端;最后学生机端提取JPEG数据,并转换成BMP图像,将多变化区域图像合成显示。实验结果表明,此方案能够实现高效的屏幕捕捉并同步显示,具有良好的实时性,可以应用于远程监控、远程教学等领域。

  关键词: 计算机科技论文,Mirror Driver,屏幕共享,图像合成,JPEG

  Research and implementation of screen sharing scheme based on Mirror Driver

  Zhou Shuyi1, Li Bin2, He Yuhu1

  (1. Modern Technological Center in Education, Beijing University of Technology, Beijing 100124, China;

  2. Department of Computer Science, Beijing University of Technology)

  Abstract: To meet the demand of synchronous display between student-side and teacher-side in distant teaching, a resolution of teacher-side screen sharing technology based on Mirror Driver is introduced. In view of the characteristics of non-high dependence of DirectDraw on the teacher-side and Mirror Driver captures the screen variation region efficiently and precisely, this resolution firstly captures the teacher-side screen effectively. It compress the snapped varying picture to JPEG format and transmit it to the student-side over the network. The student-side extracts the JPEG data, converts them to BMP picture, composites and displays the changing area. The practice shows that this method can capture screen efficiently, and display synchronously. It has a good real-time performance, and may be applied in the domain of remote monitoring and distant teaching.

  Key words: Mirror Driver; screen sharing; image synthesis; JPEG

  0 引言

  目前主要有基于Hook和基于Mirror Driver的软件屏幕共享技术。Hook是Windows提供的一种重要的系统接口,当屏幕重绘消息被系统处理之前,会被Hook捕捉到并处理。基于 Hook的方法计算量比较小,速度比较快,占用系统资源较少[1],能较好地平衡CPU占用率和生成文件的大小[2],但无法捕捉控制台等DOS窗口的变化[1],并且对屏幕变化的跟踪具有不确定性[2]。Mirror Driver是虚拟设备的显示驱动,对一个或多个额外的显示设备进行绘图映射,并且能够精确地捕捉屏幕的变化区域。基于Mirror Driver的方法在精确度、准确度、CPU占用率及稳定性等方面均满足理想要求。由于不支持DirectDraw,会对DirectDraw依赖较高的应用程序产生较大的影响,丧失硬件加速功能[3]。

  综合考虑目前软件屏幕共享技术的优缺点,本文提出一种基于C/S(客户机/服务器)体系结构的远程教师机屏幕共享方案。

  1 架构设计

  1.1 系统体系结构

  C/S软件体系结构是基于资源不对等,为实现资源共享提出来的[4],并且很多分布式系统都是以此体系结构实现的。该方案以教师机端作为服务器,学生机端作为客户端,实现学生机端同步显示教师机屏幕的功能。该方案的系统体系结构如图1所示。

  1.2 系统功能设计

  教师机端采用Mirror Driver技术实现屏幕动态变化区域捕捉,为了保证变化图像的稳定准确传输,将捕获到的图像压缩成JPEG(Joint Photographic Experts Group)格式,压缩后的图像压缩率达到95%以上,同时图像也能保证较高的清晰度。   由于学生机端接收到JPEG图像后,需要将图像在指定位置显示,因此,教师机端需要对传输的JPEG图像加入包头信息,用于描述图像的位置、长度、捕捉的顺序等信息。

  UDP协议不提供可靠通信保证[5],不能保证传输的数据能够到达目的地,是一种面向无连接的通信协议;TCP具备可靠的传输特性,能够保证数据准确有序到达目的地,是一种面向连接[6]的协议。在网络传输过程中丢帧会造成学生机端接收的图像出现不连续、花屏等现象,因此,为了保证变化图像能够准确有序地到达学生机端并显示,教师机端采用TCP协议传输变化图像。

  由多幅JPEG图像内容合成的图像中往往存在质量因子或分块位置不一致[7] 等问题。为了保证合成后图像的一致性和位置的准确性,同时降低图像合成的复杂性,并提高图像合成的效率,将学生机端接收到的JPEG图像转换成 BMP(BitMap)图像。该方案实现的系统功能如图2所示。

  2 系统实现

  2.1 Mirror Driver技术

  Mirror Driver由Display Driver与Video Miniport Driver驱动构成。Mirror Driver功能的实现主要依赖Display Driver驱动实现。Display Driver通过Win32 API与内核模式下GDI(Graphics Device Interface)组件交互,并且必须支持GDI调用所需的接口,这些接口是 DrvEnableDriver,DrvGetModes,DrvEnablePDEV,DrvCompletePDEV,DrvEnableSurface,DrvDisableSurface,DrvDisablePDEV,DrDisableDriver,DrvAssertMode[3]。

  2.2 打包格式

  对将要发送的JPEG数据加入包头信息,其中序列号表示捕获的变化图像的顺序,保证学生机端以正确顺序显示变化图像;数据长度表示JPEG图像实际长度,用于在一次Socket接收的数据中分离出一个变化图像;起点x和起点y表示捕获图像在桌面左上角坐标;终点x和终点y表示捕获图像在桌面右下角的坐标。包头格式如图3所示。

  2.3 学生机端接收缓冲区设置

  Windows MFC对底层Socket[9-10]实现进行了面向对象的封装,使用起来更加方便。本系统使用CSyncSocket类实现网络中数据的异步传输。

  当教师机端捕捉变化图像过多,学生机端没有足够缓冲区接收的情况下,就会出现丢帧现象,但是TCP协议会对丢失的帧进行超时重传,这样会影响学生机端对服务器端变化图像的实时显示。为解决这个问题,学生机端需要将底层Socket的缓冲区设置到尽可能大,使用CSyncSocket类中 SetSockOpt函数设置,第一个参数使用SO_RCVBUF(用于指定接收缓冲区的大小)。

  学生机端每接收一次数据,都需要在接收的数据中提取出JPEG图像,并且提取出的JPEG图像可能有很多个,然后发送消息通知应用程序接收数据,但应用程序不一定能及时处理缓冲区中的消息,如果不能及时处理接收到的数据,会出现丢帧现象,此时TCP不会重传丢失的帧。丢帧会造成客户端图像显示不连续等问题,为了解决此问题,本系统使用动态分配内存的循环缓冲队列方法。

  当学生机端接收到数据后,需要根据图3中定义的包格式提取JPEG图像信息。由于JPEG图像的数据长度相差过大,若是提前分配空间,会造成空间浪费现象。此时可以分配足够大的数组空间用于记录已经分配空间的指针,该方案分配30个数组空间,使用WIN7操作系统,4 核CPU,在高负载的情况下最高使用15个堆空间,并运转正常。使用循环队列的方式对指向堆空间的指针进行管理,当有数据到来时则分配堆空间,图像合成显示后则销毁指针指向的堆空间。动态分配循环队列缓冲区如图4所示。

  2.4 JPEG图像转换成BMP图像

  为了实现图像转换,本系统选用目前广泛使用的开源库Libjpeg[11]。Libjpeg库是一个完全由C语言实现的库,包含了JPEG解码、JPEG编码功能的实现。在这里为了能够将接收到的JPEG图像数据转换成BMP数据,并将转换后的BMP图像放入内存,需要对Libjpeg进行如下修改。

  在结构体djpeg_dest_ptr中删除FILE*output_file,添加PBYTE pData和UINT nDataLen,记录输出缓冲区的地址和输出缓冲区的大小。

  修改write_bmp_header函数,删除函数中写入位图文件[8]的信息,并将位图信息写入内存,添加如下代码:

  memcpy(dest->pub.pData,bmpinfoheader,40);

  修改finish_output_bmp函数信息,将转换后BMP图像写入输出缓存,添加如下代码:

  for (col=dest->row_width; col>0; col--) {

  memcpy(pData+i,data_ptr,1);

  i++;

  data_ptr++;

  }

  dinfo是jpeg_decompress_struct结构体类型,记录解压过程中的所有信息。JPEG图像转换成BMP图像过程如图5所示。

  [初始化dinfo

  jpeg_create_decompress()][将接收的jpeg图像数据写入缓存

  jpeg_mem_src()][读取JPEG图像的头信息,写入dinfo

  jpeg_read_header()][初始化输出缓冲区

  jinit_write_bmp()][JPEG图像解压开始   jpeg_start_decompress()] [将解压数据输出到虚缓冲区

  start_output()][从虚缓冲区读数据到输出缓冲区

  jpeg_read_scanlines()

  put_pixel_rows()][解压完成

  finish_output()][清除剩余资源

  jpeg_finish_decompress()

  jpeg_destroy_decompress()]

  图5 JPEG图像转换成BMP图像

  2.5 BMP图像的合成显示

  学生机端第一次连接教师机端时,会接收到完整的屏幕图像。根据图3中描述的坐标信息,可以知道教师机端屏幕的分辨率,然后根据分辨率建立屏幕显示缓冲区。根据坐标信息,将转换后的BMP图像填充到缓冲区指定位置。BMP图像存储时要求每行的字节数是4的整数倍,若不满足此要求,需要对该行填充字节信息。为了保证图像正常显示,在将接收到的图像数据放到缓冲区指定位置前,去掉填充字节,然后利用Windows提供的GDI库对桌面显示缓冲的图像进行显示[12]。位图显示过程如图6所示。

  3 实验结果

  该方案实现后,教师机端能够高效捕捉变化区域图像,学生机端可以及时接收教师机端传送的变化图像。在教师机端传输变化图像过多时,学生机端依然能够对变化图像合成并正确显示。学生机端接收的JPEG图像和转换后的BMP图像清晰度对比如图7、图8所示。两个图像分辨率都是110×108。

  该方案以教师机端每分钟鼠标移动次数为基准,对教师机端和学生机端进行性能测试,测试环境如下。

  教师机端:操作系统,WIN7,32位;CPU,双核,3.0GHZ;内存3G。

  学生机端:操作系统,WIN7,64位;CPU,四核,2.66GHZ;内存4G。

  测试结果如表1所示。

  实验结果表明,经过JPEG压缩,然后转换成BMP图像后,屏幕图像能够保持很好的清晰度,能够准确显示远端教师机屏幕变化;随着每分钟鼠标移动次数的增多,教师机端CPU使用率有很小幅度的升高,学生机端CPU使用率基本上没有变化, 效率较高。

  4 结束语

  本文旨在提供一种对远端计算机屏幕变化图像进行捕捉,通过网络传输到客户端,并合成显示的完整解决方案。此方案可以应用于远程教学,将教师机桌面变化及时呈现到学生机端;可以应用到远程监控,将多个计算机的屏幕变化图像统一传输到监控客户端,并统一显示。实际部署及应用结果表明,采用本方案实现的系统,性能优良,具有良好的应用前景。

  参考文献:

  [1] 杨红生,田地,王丰贵等.基于Hook和轮询检测机制的屏幕共享技

  术[J].计算机工程与应用,2009.45(5):29-31

  [2] 倪晓军,郑龙.基于Mirror Driver的自适应屏幕录制算法[J].计算机工

  程,2011.37(11):281-282

  [3] 周恕义,陈圣奇,贺玉虎等.基于Mirror Driver的屏幕图像捕捉技术[J].

  计算机工程,2013.39(6):295-303

  [4] 张友生,陈松乔.C/S与B/S混合软件体系结构模型[J].计算机工程

  与应用,2002.23:138-140

  [5] 赵飞,叶震.UDP协议与TCP协议的对比分析与可靠性改进[J].计算

  机技术与发展,2006.16(9):219-221

  [6] 张艺濒,张志斌,赵咏等.TCP与UDP网络流量对比分析研究[J].计算

  机应用究,2010.27(6).

  [7] 李晟,张新鹏.利用JPEG压缩特性的合成图像检测[J].应用科学学

  报,2008.26(3):281-283

  [8] 徐殿武.位图文件操作的程序设计的研究[J].微计算机信息,

  2007.05X:176-178

  [9] 张允刚,刘常春,刘伟等.基于Socket和多线程的远程监控系统[J].控

  制工程,2006.13(2):175-177

  [10] 于涛,王健.基于Socket通讯技术的上层监控软件的实现[J].计算机

  技术与发展,2009.19(3):243-245


转载请注明来自:http://www.yueqikan.com/jisuanjiwangluolw/44540.html