远程屏幕图像实时
传 输 的原 理 与实现
中国自然科学研究
China Natural Science Research 周宏龊
远程屏幕图像实时传输的原理与实现
周 宏毅
(西南科技大学 四川绵阳 621000)
【摘 要】本文就当前的热点远程屏幕图像的抓取及其在网络上传输过程进行了详细介绍,并针对目前这类相关软件中普遍
存在的网络带宽过大、实时性差、占用系统资源过多、稳定性差等问题侧重在屏幕图像的抓取与位图数据流的压缩、解压缩两方面
提出了较为有效的解决方法,并提供了改进与实现的Delphi代码。本文将对于现有此类相关软件的完善及今后相关软件的研发具
有非常重要的指导与参考价值。
【关键词】屏幕图像 屏幕抓取 实时传输 网络传输 数据压缩
目前,随着计算机网络的不断推广运用,基于计算机网络的应用软件的研发也就成了众多的软件企业与科研机构的主要研发
热点之一。在这些应用软件当中,基于计算机网络的远程实时控制、管理软件因其具有极其广泛的应用领域如网络多媒体教室、网
络管理与控制、网络服务、在线技术支持等,所以它具有非常良好的发展前景与商业价值。虽然目前已经有一些相关的软件产品,
但普遍都存在占用网络带宽过大、实时性差、占用系统资源过多、稳定性差等问题,究其原因就在于在远程屏幕图像在网络上传输
这个关键技术环节上问题解决的不够理想。
本人经过长期的反复研究与实践,终于找到了一些方法能够很好地解决远程屏幕图像网络传输占用网络带宽过大、实时性
差、占用系统资源过多、稳定性差等关键问题,为这类软件研发中的远程屏幕图像在网络上传输提供一种非常有价值的可供参考
的解决方法 ,以下便就此展开叙述与探讨。
一
、远程屏幕图像在网络上传输过程
一 般这类软件都采用典型的Client/Server结构,由客户端与服务端两部分构成。客户端主要是负责向服务端发出获取服务端
屏幕图像的请求与将从服务端发送而来的屏幕图像在本地实时地显示出来,而服务端主要是负责响应客户端的请求并抓取与发
送屏幕图像。由于服务端所抓取的屏幕图像一般为位图格式,其数据量较大,若直接发送则会导致占用网络带宽过大、实时性差、
占用系统资源过多、稳定性差等问题,因此需经过压缩后才能将其发送给客户端,而客户端相应地也要将接受到到屏幕图像数据
进行解压缩后才能正确地将屏幕图像显示出来。
解决目前普遍存在的问题的关键就在于屏幕图像数据的压缩与解压缩和屏幕图像的抓取上。对于屏幕图像数据的压缩与解
压缩这一点,主要追求的是较高的压缩率与较快的压缩与解压缩速度,这可以通过选取一定的压缩与解压缩算法如 Huffman、
RLE、LZW 等来实现,已有的这类软件也非常注重这一点,因此 目前这一方面的提高余地已非常有限。对于屏幕图像的抓取这一
点,很多这类软件在研发过程中却不够注意甚至是忽略了所选取的屏幕图像抓取方法的重要性,而采用了常用的一般的抓取方
法。其实,屏幕图像的抓取与数据的压缩与解压缩一样重要,都将对屏幕图像的实时传输过程产生极其重要的影响,因此这一方面
尚有较大的提高空间,本文也就此着重进行详细的阐述。
二、屏幕抓取与传输方法及其改进实现
1.屏幕抓取模式的选择 屏幕抓取模式有多种,如在 Delphi中可用的抓取模式 CopyMode有 cmSrcCopy、cmSrclnvert、
cmw11jteness等 15种。当采用cmSrcCopy模式时,则直接将待拷贝的源位图拷贝至目的画布中,目前普遍的处理方式便是采用这
种抓取模式抓取整个屏幕图像,然后直接将其进行压缩。而若采用cmSrclnvert模式时,在服务端则先将目的画布中已有的位图与
待拷贝的源位图位值进行 XOR异或运算后,然后将运算所得的位图进行压缩,相应地在客户端显示时,应将解压后的位图位值
与当前的位图位值进行XOR异或运算,则运算所得的位图便是服务端当前所传送的屏幕图像。虽然后一种屏幕图像抓取方法比
前一种分别在客户端与服务端多了一步位图位值XOR异或运算,但是经压缩后,采用后一种方法数据量一般比前一种方法的数
据量要小得多。这主要是因为一般情况下屏幕图像总是在一个局部而非整个屏幕发生变化,将当前屏幕图像与上一屏幕图像进行
XOR异或运算后,所得屏幕位图未变化部分的位值将为0,而变化部分的位值为 1,当屏幕图像变化范围较小时,则所抓取的屏幕
图像位图的大量位值将为 0,同时压缩率除与压缩算法有关外,还与待压缩的数据本身有关,因此这样对其进行压缩将取得更加理
想的压缩效果。虽然采用两种抓取模式所获得的屏幕图像数据都一样,但从采用采用 WinZip压缩后的数据量来看,cmSrclnvert模
式下的压缩数据量明显小于采用 cmSrcCopy模式的压缩数据量。本人在测试时使用的是 Delplfi5.0中自带的一个数据流压缩、解
压缩解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
Zlib.pas和Zlibconst.pas两个单元文件来解决数据压缩、解压缩问题 ,实现了很高的数据压缩率(较WinZip高),所
得的测试结果也与原先的结果相近。这就说明采用 cmSrclnvert 模式将比采用cmSrcCopy模式在传输屏幕图像数据时占用少得
t【作者简介】周宏毅(1971一 )汉,江苏无锡人,大学本科,讲师,现在西南科技大学从事计算机应用(软件、算法)研究。
一 3 一
维普资讯 http://www.cqvip.com
远程屏幕图像实时
传 输 的原 理与 实现 Chin
中国自然科 学研究
周 龊aNatural ScienceResearch IL" 周 戡
多的网络带宽。
在 Delphi中的采用 cmSrclnvert 模式抓取屏幕图像的实现程序代码省略。
2 屏幕分区域抓取与传输 目前一般都采用的是一次性整屏抓取,由于数据量大,往往无法取得较好的实时效果,尤其是在
网络带宽有限时这一点特别突出。其实,服务端完全可以通过将屏幕划分为一定数量的大小相等的矩形分别在抓取模式为cIn—
Srclnvert下进行抓取与压缩,然后将压缩后的数据添加到一个待发送的队列中去等待传输。或者是比较所抓取的矩形区域图像是
否发生了变化,若未发生变化则不处理,否则才进行后续处理。与此相对应,客户端从接受到的数据队列中取出队头数据进行解
压,然后在相应位置上显示出一个矩形大小的图像。考虑到实时性要求 ,实际编程实现时可采用多线程程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
,利用多个线程分
别处理不同区域的屏幕图像。这种方法能够在不同的网络带宽情况下均获得较好的实时性,占用系统资源也较少,而且也会使软
件的稳定性增强。但是必须要注意的是屏幕划分区域的个数应根据实际情况主要是网络带宽来设定,因为若划分区域的个数过多
则会导致对每个矩形区域图像进行抓取、压缩、传输、解压和显示的时间总和反而超过整屏处理的时问,这样虽然网络带宽占用
小,但实时性可能下降。又若划分区域的个数过少,则较整屏处理占用的网络带宽下降幅度不大,效果不明显。经过本人测试,在
10M 的局域网中划分区域的个数为4"6个时效果较为理想,此时每个矩形区域图像的数据经压缩后为 1-2KB(分辨率 800*600,增
强色16位),比采用整屏处理时的占用的网络带宽要低得多,而且实时性也有一定的提高,延迟低于0.8秒。
各部分主要功能如下 :
服务端:1. 抓取一个个矩形区域的屏幕图像;2.判断矩形区域图像是否改变;3. 对发生改变的矩形区域图像进行压缩,并
放人发送队列;4. 跳转到第 1步。
客户端:1. 从接收队列中取出一个数据块;2. 解压数据块,确定矩形区域位置;3. 在指定位置显示矩形区域图像;4. 跳
转到第 1步。具体程序略。
三、屏幕图像数据流的压缩与解压缩
对于所抓获的屏幕图像数据的压缩与解压缩可以选用多种算法如 Huffman、tLLE、LZW 等第三方提供的解决方法,其实 Del—
phi5.0本身就自带了一个非常优秀的数据流压缩、解压缩的控件包 Zlib,可以利用其中的Zlib pas和 Zlibconst.pas两个单元文件
提供的接口来使用其中的方法。具体实现的思路如下:首先利用屏幕拷贝捕捉到当前整个屏幕的图像,然后在内存中保存为
BMP文件格式。在服务端进行压缩时,使用 TCompressionStream对象对原始图像进行压缩并且保存为自定义的变量中;在客户
端解压缩时,使用 TDecompressionStream对象对被压缩的图像进行解压缩,还原为 BMP格式的图像文件并随即显示出来。压
缩与解压缩具体实现的代码如下:
服务端要使用数据压缩过程CompressBitmap的实现代码省略。
四、结束语
在整个实现过程中,除了考虑屏幕抓取和数据压缩、解压缩这两个核心问题外,还要注意选择好用于传输的网络协议以及服
务端和客户端双方的握手协议等。同时,由于整个实现过程要使用到大量的内存流、指针、GDI资源和多线程等具有一定难度的编
程技术,因此需要认真设计,仔细编码,努力提高软件的稳固性与效率。
利用上述技术和方法,同时还集成了IcQ 和实时语音传输功能,本人已经成功地编写出了一套远程控制与管理系统,能够
有效地对网络上的计算机、网络设备进行控制与管理,还能为网络用户实时提供一些在线技术帮助与交流,大大地提高了工作效
率和减少了工作量。
【参考文献】
1.张友生,远程控制编程技术,电子工业出版社 ,2002;
2 蔡健,Delphi数据压缩处理,机械工业出版社,2003.1;
3.林丽闽等编著,Windows2000开发指南,电子工业出版社,2001 5。
维普资讯 http://www.cqvip.com