You are on page 1of 4

第 01 卷 第 $ 期 盐城工学院学报(自然科学版) QC’. 01 PC.

$
!##$ 年 - 月 (P<K9H<’ 7G*&=G&)
MC9H=<’ C: N<=G)&=O I=LK*K9K& C: +&G)=C’COD 7&(. !##$
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"

远程屏幕图像实时传输的方法与实现 !

董 琴
(盐城工学院 计算中心,江苏 盐城 !!"##$)

摘 要:就当前的热点远程屏幕图像的抓取及其在网络上传输过程进行了详细介绍,并针对
目前这类相关软件中普遍存在的网络带宽过大、实时性差、占用系统资源过多、稳定性差等问
题,侧重在屏幕图像的抓取与位图数据流的压缩、解压缩两方面提出了较为有效的解决方法,
并提供了改进与实现的 %&’()* 代码。
关键词:屏幕图像;屏幕抓取;实时传输;网络传输;数据压缩
中图分类号:+,$-$ . #-$ 文献标识码:/ 文章编号: (!##$)
0120 3 4$!! #$ 3 ##01 3 #"

目前,随着计算机网络的不断推广运用,基于 多、稳定性差等问题,因此需经过压缩后才能将其
计算机网络的应用软件的研发也就成了众多的软 发送给客户端,而客户端相应地也要将接受到的
件企业与科研机构的主要热点之一。在这些应用 屏幕图像数据进行解压缩后才能正确地将屏幕图
软件当中,基于计算机网络的远程实时控制,管理 像显示出来。
软件具有极其广泛的应用领域,如网络多媒体教 解决这一问题的关键就在于屏幕图像数据的
室、网络管理与控制、网络服务、在线技术支持等, 压缩与解压缩和屏幕图像的抓取。对于屏幕图像
所以它具有非常良好的发展前景与商业价值。虽 数据的压缩与解压缩这一点,主要追求的是较高
然目前已经有一些相关的软件产品,但普遍都存 的压缩率与较快的压缩与解压缩速度,这可以通
在占用网络带宽过大、实时性差、占用系统资源过 过选 取 一 定 的 压 缩 与 解 压 缩 算 法 如 89::;<=、
多、稳定性差等问题,原因就在远程屏幕图像在网 >?@、?AB 等来实现,已有的这类软件也非常注重
络上传输这个关键技术环节上。 这一点,因此目前这一方面的提高余地已非常有
在长期的反复研究与实践的基础上,本文给 限。对于屏幕图像的抓取这一点,很多这类软件
出了一种解决远程屏幕图像网络传输占用网络带 在研发过程中都不够注意甚至是忽略了所选取的
宽过大、实时性差、占用系统资源过多、稳定性差 屏幕图像抓取方法的重要性,而采用了常用的一
等关键问题的解决方法。 般的抓取方法。其实,屏幕图像的抓取与数据的
压缩与解压缩一样重要,都将对屏幕图像的实时
0 远程屏幕图像在网络上的传输过程
传输过程产生极其重要的影响,因此这一方面尚
一般这类软件都采用典型的 5 6 7 结构,由客 有较大的提高空间,本文也就此着重进行详细的
户端与服务端两部分构成。客户端主要是负责向 阐述。
服务端发出获取服务端屏幕图像的请求、将从服
! 屏幕抓取与传输方法及其改进实现
务端发送来的屏幕图像在本地实时地显示出来,
而服务端主要是负责响应客户端的请求并抓取与 !.0 屏幕抓取模式的选择
发送屏幕图像。由于服务端所抓取的屏幕图像一 屏幕抓取模式有多种,如在 %&’()* 中可用的
般为位图格式,其数据量较大,若直接发送则会导 抓 取 模 式( 5C(DECF& )有 G;7HG5C(D、;7HGI=J&HK、
致占用网络带宽过大、实时性差、占用系统资源过 G;B)*K&=&LL 等 04 种。当采用 G;7HG5C(D 模式时,

! 收稿日期:!##$ 3 #4 3 !4
万方数据
作者简介:董 琴(0-2"R),女,江苏大丰人,盐城工学院助教。
第Q期 董 琴:远程屏幕图像实时传输的方法与实现 ・ .P ・
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
则直接将待拷贝的源位图拷贝至目的画布中,目 ?0@;"2
前普遍的处理方式便是采用这种抓取模式抓取整 ,:I ,(!)
(-,-,?0@;"2 : /0?)8,?0@;"2 : K(0D8));C C
个屏幕图像,然后直接将其进行压缩。而若采用 指定拷屏范围
!"#$!%&’($) 模式时,在服务端则先将目的画布中 ?0@;"2: 3<&’<= : 3425L4?( :I !"#$!%&’($);C C 设 置
已有的位图与待拷贝的源位图位值进行 *+,(异 拷贝模式为 !"#$!%&’($),非常重要
或)运算,然后将运算所得的位图进行压缩,相应 ?0@;"2: 3<&’<= : 3425,(!)( ,, 3M$B"2 : 3<&’<=,
地在客户端显示时,应将解压后的位图位值与当 ,);C C 将当前图像与上一次的图像进行 *+, 运
前的位图位值进行 *+, 运算,则运算所得的位图 将结果位图存放于 ?0@;"2 中,其中 3M$B"2 是
算,
便是服务端当前所传送的屏幕图像。虽然后一种 一个全局变量,存放的是上一次抓屏时的屏幕图
屏幕图像抓取方法比前一种分别在客户端与服务 像
端多了一步位图位值 *+, 运算,但是经压缩后, ( ?0@;"2,)"2);C C 将 ?0@;"2 进行压
34"2$(==B0)"<2
采用后一种方法数据量一般比前一种方法的数据 缩,压缩后的数据存放于 )"2 中
量要小得多。这主要是因为一般情况下屏幕图像 ( ;"2);C C 当前图像存入 3M$B"2,下
3M$B"2 : J==0D&
总是在一个局部而非整个屏幕发生变化,将当前 一次抓屏时进行 *+, 运算使用
屏幕图像与上一屏幕图像进行 *+, 运算后,所得 ……
屏幕位图未变化部分的位值将为 -,而变化部分
屏幕 图 像 抓 取 过 程 3<)!8#!$((& 的 实 现 代 码 如
的位值为 .,当屏幕图像变化范围较小时,则所抓
下[>]:
取的屏幕图像位图的大量位值将为 -,同时压缩
( ’<$ ;"2:AB0)"<2;E0F(7G4$"<):
2$4!(?M$( N()#!$((&
率除与压缩算法有关外,还与待压缩的数据本身
A20F(7G4$"<));
有关,因此这样对其进行压缩将取得更加理想的
’<$
压缩效果。虽然采用两种抓取模式所获得的屏幕
?! :0&)(D($;
图像数据都一样,但从采用 /0&102 压缩后的数据
! :A3<&’<=;
量来看,!"#$!%&’($) 模式下的压缩数据量明显小
, :A,(!);
于采用 !"#$!3425 模式的压缩数据量。笔者在测
;(D0&
试时使用的是 6(72809 : - 中自带的一个数据流压
;"2 :I AB0)"<2 : 3$(<)(;
解压缩解决方案 170; : 2<= 和 170;!4&=) : 2<=> 个
缩、
?! :I N()/0&?4O63(-);C C 获取整个屏幕的 63,
单元文件来解决数据压缩、解压缩问题,实现了很
参数 - 指的是屏幕
高的数据压缩率(较 /0&102 高)。这就说明采用
)$5
!"#$!%&’($) 模式将比采用 !"#$!3425 模式在传输
屏幕图像数据时占用少得多的网络带宽[.]。 ! :I A3<&’<= : 3$(<)(;C C 创建一个 !<&’<= 对象
在 6(7280 中采用 !"#$!%&’($) 模式抓取屏幕图 ! : K<&?7( :I ?!;
像的实现程序代码如下: , :I ,(!)
(-,-,#!$((& : /0?)8,#!$((& : K(0D8));C C
…… 指定抓取范围,采用的是全屏
’<$ ;"2 : /0?)8 :I ,: ,0D8);
;"2,?0@;"2:AB0)"<2;C C 两个用于保存屏幕图像 ;"2 : K(0D8) :I ,: B4))4";
的临时位图对象 (,,!,,);C C 把整个屏幕复
;"2 : 3<&’<= : 3425,(!)
,:A,(!);C C 用于保存抓取范围的一个 A$(!) 对象 制到 ;"2 中
)"2:=)$0&D;C C 用于保存压缩后的数据的变量 ;"2 : E0F(7G4$"<):I E0F(7G4$"<);C C 设置位图格式
…… ! : K<&?7( :I -;
>:> 屏幕图像抓取过程 ! : G$((;
3<)!8#!$((&( ;"2, E0F(7G4$"<) );C C 按 指 定 的 E0FH @0&<775
(7G4$"<) 抓取全屏并将其存放于 ;"2 中 (-,?!);
,(7(<=(63
?0@;"2:I AB0)"<2 : 3$(<)(; (&?;
万方数据( ;"2 );C C 将 ;"2 中 的 位 图 传 递 给
?0@;"2: J==0D& (&?;
・ -5 ・ 盐城工学院学报(自然科学版) 第 -2 卷
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
!"# 屏幕分区域抓取与传输 9A<+KLM’%,:7JA<+KLM’%I,;H H 保存所抓取的屏幕位图
目前一般都采用的是一次性整屏抓取,由于 的位值格式
数据量大,往往无法取得较好的实时效果,尤其是 CM%J’+66AM)N+*+K:7$M%J’+66AM)N+*+K;H H 保存压缩级
在网络带宽有限时这一点特别突出。其实,服务 别
端完全可以通过将屏幕划分为一定数量的大小相 COI)G+@:4MMK+I);H H 保存该矩 形 区 域 的 屏 幕 图 像
等的矩形分别在抓取模式为 $%&’$()*+’, 下进行抓 是否发生变化
取与压缩,然后将压缩后的数据添加到一个待发 ?@AB+$,;+<,:9;+<,;H H 指向对列中下一个数据块的
送的队列中去等待传输。或者是比较所抓取的矩 指针
形区域图像是否发生了变化,若未发生变化则不 …… " ;H H 根据需要所添加的其他一些变量
处理,否则才进行后续处理。与此相对应,客户端 ……;
从接受到的数据队列中取出队头数据进行解压, :;E;
然后在相应位置上显示出一个矩形大小的图像。
# 屏幕图像数据流的压缩与解压缩
考虑到实时性要求,实际编程实现时可采用多线
程程序设计,利用多个线程分别处理不同区域的 对于所抓获的屏幕图像数据的压缩与解压缩
屏幕图像。这种方法能够在不同的网络带宽情况 可以选用多种算法如 PQRR%I)、BN:、NST 等第三
下均获得较好的实时性,占用系统资源也较少,而 方提供的解决方法,其实 E+KJOA2 " . 本身就自带了
且也会使软件的稳定性增强。但是必须要注意的 一个 非 常 优 秀 的 数 据 流 压 缩、解 压 缩 的 控 件 包
是屏幕划分区域的个数应根据实际情况主要是网 SKAU,可以利用其中的 SKAU " JI6 和 SKAU$M)6, " JI6 两
络带宽来设定,因为若划分区域的个数过多则会 个单元文件提供的接口来使用其中的方法。具体
导致对每个矩形区域图像进行抓取、压缩、传输、 实现的思路如下:首先利用屏幕拷贝捕捉到当前
解压和显示的时间总和反而超过整屏处理的时 整个屏幕的图像,然后在内存中保存为 4/9 文件
间,这样虽然网络带宽占用小,但实时性可能下 格式。在服务端进行压缩时,使用 7CM%J’+66AM)V
降。又若划分区域的个数过少,则较整屏处理占 &,’+I% 对象对原始图像进行压缩并且保存为自定
用的网络带宽下降幅度不大,效果不明显。经过 义的 变 量 中;在 客 户 端 解 压 缩 时,使 用 7E+$M%V
笔者测试,在 -./ 的局域网中划分区域的个数为 J’+66AM)&,’+I% 对象对被压缩的图像进行解压缩,
0 1 2 个时效果较为理想,此时每个矩形区域图像 还原为 4/9 格式的图像文件并随即显示出来。
的数据经压缩后为 - 1 ! 34
(分辨率 5..! 2..,增 压缩与解压缩具体实现的代码如下:
强色 -2 位),比采用整屏处理时占用的网络带宽 #"- 服务端数据压缩过程实现代码
要低得多,而且实时性也有一定的提高,延迟低于 J’M$+@Q’+ CM%J’+664A,%IJ( U%J:74A,%IJ;*I’ EI,I:
[0]
. " 5 6。 6,’A)G) ;
服务端:
(-)抓取一个个矩形区域的屏幕图 *I’
像;
(!)判断矩形区域图像是否改变;
(#)对发生 $6 :7CM%J’+66AM)&,’+I%;H H 该类由 SKAU " JI6 中定义
改变的矩形区域图像进行压缩,并放入发送队列; %6 :7/+%M’W&,’+I%;
(0)跳转到第 - 步。 U+GA)
客户端:
(-)从接收队列中取出一个数据块; %6 := 7/+%M’W&,’+I%" C’+I,+;
(!)解压数据块,确定矩形区域位置;( #)在指定 $6 := 7CM%J’+66AM)&,’+I%" C’+I,+( $KE+RIQK,,%6 );
位置显示矩形区域图像(#)跳转到第 - 步。 H H $KE+RIQK, 为默认压缩级别
实际实现时,可用下列的数据结构来存储每 U%J " &I*+7M&,’+I%( $6);H H 源数据存放于 $6 中,压
个矩形区域图像的数据[#]: 缩后的数据存于 %6 中
789: 9;+<, = >?@AB+$,; $6 " L’++;
?@AB+$, = B:CDBE &+,N+)G,O(EI,I,%6 " &AX+);
F-,8-,F!,8!:(),+G+’;H H 保存矩形左上角与右下 (%6 " /+%M’W>,EI,I[ -],%6 " &AX+);H H 将 压 缩
/M*+
角的坐标 后的数据存放于 EI,I 中
万方数据
4A,%IJ:74A,%IJ;H H 保存所抓取的屏幕图像 %6 " L’++;
第$期 董 琴:远程屏幕图像实时传输的方法与实现 ・ ?] ・
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
!"#; !"#;
$%& 客户端数据解压缩过程实现代码 ./ :E 79!.)(:;2(!3.% -(!32!;
’()*!#+(! ,"-).’(!//012.3’( *)"/2 4323: /2(1"5; ( 6+<K,/1=!);B B 将解压数据存入内存流中
./ % J(12!
6.’:7012.3’); F(!!9!. ( 6+<);
83( ./ % L)/121)" :E I;
./ :79!.)(:;2(!3.; ( 6.’ N O "1P);
M//!(2
6+< :’)1"2!(; (./);B B 位图 6.’ 对象从内存
6.’ % @)3#F().;2(!3.
/1=! :1"2!5!(; 流中读图像数据
6!51" ./ % F(!!;
2(: !"#;
( > 4323[ ? ],@!"52A( 4323 ),@!"52A
4!*).’(!//0+<
Q 结束语
(4323)! $,6+<,/1=!);B B 指针 6+< 指向解压后的
数据存放的内存地址 在整个实现过程中,除了考虑屏幕抓取和数
!C*!’2 据压缩、解压缩这两个核心问题外,还要注意选择
)" D:DC*!’21)" #) 6!51" 好用于传输的网络协议以及服务端和客户端双方
D% 9!//35! :E F)(.32(’D(()( 4!*).’(!//1"5 0+<<!( 的握手协议等。同时,由于整个实现过程要使用
( @!" E G #): ’H ?$ H ?I’G /’,
[ @!"52A
(4323),! % 到大量的内存流、指针、R4S 资源和多线程等具有
9!//35!]);B B 解压出错的异常处理 一定难度的编程技术,因此需要认真设计,仔细编
(31/!; 码,努力提高软件的稳固性与效率。
!"#;

参考文献:

[?]唐良瑞,马全明 % 图像处理实用技术[9]% 北京:化学工业出版社,


&III %
[&]王兴晶,君立民 % 4!P’A1T % I 开发与实例[9]% 北京:电子工业出版社,
&III %
[$]吕宗智,汪世攀,王晟,等 % 4!P’A1 实用技术精粹[9]% 北京:人民邮电出版社,
&III %
[Q]清宏计算机工作室 % 4!P’A1 编程技巧(网络与数据篇)
[9]% 北京:机械工业出版社,
&II? %

!"#$%& ’(& )*+,"*"(#’#-%( %(


."’,#-*" /0’(1+%0#’#-%( %2 ."*%#" 340""( )*’5"

4UVR W1"
( -).’+2!( -!"2!( )< X3"*A!"5 S"/212+2! )< 7!*A")P)5:,Y13"5/+ X3"*A!"5 &&QII$,-A1"3)

671#0’4#:7A! .31" *)"2!"2 1/ 36)+2 2A! /!3(*A )< *+((!"2 #1/23"2 /*(!!" 1.35!/ 3"# 2A! ’()*!// )< 1"2!("!2 2(3"/’)(2 ,6!*3+/! *)..)"P:
2A! 63"#Z1#2A 1/ 2)) P3(5! ,/:/2!. (!/)+(*!/ 3(! 23[!" 2)) .+*A 3"# /) )" ,2A! 2!C2 .31"P: 518!/ 3831P36P! Z3:/ 2) /*(!!" 1.35! *3’2+(!
3"# *).’(!//1)" )< 612 #323 3"# /+’’P1!/ 6!22!( 4!P’A1 *)#!/%
8"9:%0&1:;*(!!" S.35!; -32*A ;*(!!";\!3P21.! 7(3"/<!(;V!2 7(3"/<!(;4323 -).’(!//1)"

万方数据

You might also like