技术领域
本发明涉及远程数据控制技术领域,特别是涉及一种显示远程桌面内容的方法及其装置。
背景技术
目前,出于远程管理或远程同步播放等目的,在许多领域需要进行远程桌面上内容(即屏幕图像)的播放(例如网络管理员对远程的服务器进行管理上)。为了观看/监控到远程桌面上的内容,通常采用的技术方案为:利用图形驱动接口(Graphics Device Interface,GDI)技术、DirectX技术等抓屏处理技术定时截取当前服务器端桌面上整个屏幕的图像数据,并将本次截取到的图像数据与前次截取到的图像数据进行比较,比较屏幕图像数据发生的差异,然后对发生变化的屏幕数据进行压缩后发送到客户端,以使客户端观看到远程桌面(即服务器桌面)上的内容。在这里,服务器端是提供远程桌面或远程访问服务的设备,也就是用户看到的远程桌面所在的设备。客户端是使用远程桌面或进行远程访问服务的设备,即为本地的设备。服务器端和客户端可以是台式计算机、笔记本电脑,嵌入式设备,智能电视等设备。
但是,如果在远程桌面(即服务器桌面)上进行视频文件的播放,那么屏幕变化区域大(全屏或者是窗口),并且桌面屏幕图像的变化速度快(每秒24帧以上),现有的抓屏和压缩技术达不到影片流畅播放的程度,假设播放器显示大小为1024 x 768,颜色深度为32位色,这样每秒视频播放数据大小是1024×768×4×4×24=72Mbytes,而现有的不同的压缩算法通常压缩效率是50%,所以每秒最少有36Mbytes的数据需要处理。这对于现有的CPU和网卡来说都是处理不过来的,所以在客户端使用播放器不能流畅进行视频文件的播放,会导致花屏等不良效果。
发明内容
有鉴于此,本发明所要解决的技术问题是提供一种显示远程桌面内容的方法及其装置,以克服现有技术在远程桌面播放视频文件时,无法流畅地播放远程视频文件的缺点。
为此,本发明提供了一种显示远程桌面内容的方法,包括步骤:
服务器端与客户端建立连接关系;
服务器端实时检测其桌面上的屏幕图像数据是否发生变化;
如果服务器端桌面上的屏幕图像数据发生变化,服务器端判断引起其屏幕图像数据发生变化的原因;
服务器端根据引起其桌面上屏幕图像数据发生变化的原因,对其桌面上屏幕图像数据进行相应处理后发送给客户端。
优选地,按照以下步骤建立连接关系:客户端向服务器端发送远程桌面连接请求;
当所述客户端合法时,服务器端与客户端建立连接。
优选地,服务器端实时检测其桌面上的屏幕图像数据是否发生变化具体为:
服务器端通过监控显卡的显存是否发生变化或者Windows系统的应用程序接口来实时检测其桌面上的屏幕图像数据是否发生变化。
优选地,通过监控系统的进程或判断源过滤器是否获得数据来判断引起屏幕图像数据发生变化的原因。
优选地,监控系统的进程具体包括:判断系统进程中是否存在播放器软件的进程以及判断桌面屏幕图像数据的变化区域是否为播放器的窗口区域。
优选地,服务器端根据引起其桌面上屏幕图像数据发生变化的原因,对其桌面上屏幕图像数据进行相应处理发送给客户端的步骤具体为:
当由于视频文件的播放引起其桌面上屏幕图像数据发生变化时,服务器端读取视频文件数据,并将视频文件数据发送给客户端;
当不是由于视频文件的播放引起其桌面上屏幕图像数据发生变化时,服务器端发送发生变化的屏幕图像数据或整个屏幕图像数据给客户端。
优选地,在服务器端读取视频文件数据之后还包括步骤:
服务器端查询客户端是否支持播放在服务器端桌面上播放的视频文件,如果不支持,转码服务器端桌面上播放的视频文件。
优选地,所述转码服务器端桌面上播放的视频文件具体为:
将服务器端桌面上播放的视频文件的格式转换为客户端支持的格式。
此外,本发明还提供了一种显示远程桌面内容的装置,包括:
连接单元,用于在服务器端与客户端之间建立连接关系;
检测单元,用于实时检测服务器端桌面上的屏幕图像数据是否发生变化;
判断单元,用于在服务器端桌面上的屏幕图像数据发生变化时,判断引起屏幕图像数据发生变化的原因;
处理发送单元,用于根据引起服务器端桌面上屏幕图像数据发生变化的原因,对服务器端桌面上屏幕图像数据进行相应处理发送给客户端。
优选地,所述检测单元通过监控显卡的显存是否发生变化或者Windows系统的应用程序接口来实时检测服务器端桌面上的屏幕图像数据是否发生变化。
优选地,所述处理发送单元当由于视频文件的播放引起服务器端桌面上屏幕图像数据发生变化时,读取视频文件数据,并将视频文件数据发送给客户端;
当不是由于视频文件的播放引起其桌面上屏幕图像数据发生变化时,发送发生变化的屏幕图像数据或整个屏幕图像数据给客户端。
优选地,该系统还包括:查询转码单元,用于查询客户端是否支持播放在服务器端桌面上播放的视频文件,如果不支持,转码服务器端桌面上播放的视频文件。
由上述本发明的技术方案可知,本发明具有如下优点:
本发明通过对引起服务器端桌面的屏幕图像数据发生变化的原因进行判断,针对不同的原因,采取相应的处理措施将服务器端桌面的屏幕图像数据发送给客户端,也就是对远程桌面的显示内容进行判断,对不同的显示内容采取不同的传输方式传输到客户端,从而使远程桌面上的内容在客户端实现正常、流畅地显示。通过本发明的技术方案,可以很好地实现对远程桌面播放视频文件等大容量数据文件的监控,从而方便用户对远程的服务器端进行控制。
附图说明
图1是本发明提供的显示远程桌面内容的方法的流程图;
图2为现有的DirectShow系统的结构示意图;
图3为本发明提供的显示远程桌面内容的装置与服务器端、客户端的连接框架图;
图4为本发明提供的显示远程桌面内容的装置集成在服务器端时的框架图。
具体实施方式
为使本领域技术人员更好地理解本发明,下面结合具体实施例对本发明提供的技术方案作具体说明。
本发明的基本思想是:对远程桌面的显示内容进行判断,对不同的显示内容采取不同的传输方式传输到客户端,从而使远程桌面上的内容在客户端实现正常、流畅地显示。
请参见图1,本发明提供了一种显示远程桌面内容的方法,包括以下步骤:
步骤S101:客户端向服务器端发送远程桌面连接请求。
步骤S102:服务器端判断该客户端是否合法,如果合法,进入步骤S103,否则,执行步骤S101。
在该步骤中,可以通过客户端用户输入的用户名和密码来验证该客户端的合法性。
步骤S103:服务器端与客户端建立连接。
当客户端合法时,服务器端同意与客户端建立连接。
步骤S104:在建立连接后,服务器端发送当前桌面上整个屏幕的图像数据给客户端。
该步骤也就是服务器端将连接建立后第一次获得的桌面屏幕的图像数据发送给客户端。在这里,可以使用现有的抓屏处理技术获取服务器桌面的屏幕数据。
例如,利用图形驱动接口GDI技术、DirectX技术等抓屏处理技术定时截取当前服务器端桌面上整个屏幕的图像数据,并将本次截取到的图像数据进行压缩后发送到客户端。
步骤S105:服务器端实时检测本地桌面中屏幕的图像数据。
步骤S106:服务器端判断本地桌面中屏幕的图像数据是否发生变化,如果发生变化,则执行步骤S107,否则,进入步骤S105。
在步骤中,判断所述服务器端本地桌面中屏幕的图像数据是否发生变化的方法有很多种,例如,可以监控显卡的显存是否发生变化,还可以挂接windows操作系统的应用程序接口(Application Programming Interface,API)来判断,甚至可以通过定时查询来判断。
步骤S107:服务器端检测是否由于视频文件的播放而导致服务器端桌面屏幕的图像数据发生变化,如果是,执行步骤S108,否则执行步骤S111。
服务器端由于打开一个新窗口,或者一个不是播放器的程序在更新屏幕以及其他一些非视频文件播放的情况都会导致服务器端桌面屏幕的图像数据发生变化。
上述步骤S107具体可以通常监控系统的进程来实现。具体为:判断系统的进程中是否存在播放器软件的进程,同时判断桌面屏幕图像数据的变化区域是否为播放器的窗口区域。
当系统的进程中存在播放器软件的进程,并且视频变化区域为播放器的窗口区域时,可以判断得出是由于视频文件的播放而导致桌面中屏幕的图像数据发生变化。
对于判断系统的进程中是否存在播放器软件的进程,具体可以为:用户事先选择几个要进行监控的播放器软件的进程,然后通过过程钩子机制来判断用户要监控的进程是否已经启动。
如果用户在客户端需要对视频文件的播放进行快进/快退/暂停/定位播放等操作,那么客户端需要将这些操作命令通过网络发送给服务器端,然后服务器端解析这些命令,对视频文件的播放进行相应操作,并把所读取到的视频文件数据发送给客户端。
此外,鉴于在Windows平台下,播放视频文件时都会使用到DirectX(具体的应该为DirectShow)来和显卡进行数据的交互,因此上述步骤S107还可以通过判断DirectShow系统中的源过滤器(Source Filters)是否获得数据来实现。
需要说明的是,DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包。在下面将对在本发明中应用的DirectShow系统进行详细介绍。
参见图2,为windows系统DirectShow结构示意图。图2为微软(Microsoft)的DirectX的系统接口以及输入输出部分。
DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。
DirectShow位于应用层中。它使用一种叫过滤器图表(Filter Graph)的模型来管理整个数据流的处理过程;参与数据处理的各个功能模块叫过滤器(Filter);各个Filter在Filter Graph中按一定的顺序连接成一条“流水线”协同工作。按照功能来分,Filter大致分为三类:源过滤器(Source Filters)、变换过滤器(Transform Filters)和提交过滤器(Rendering Filters)。其中,源过滤器(Source Filters)主要负责取得数据,数据源可以是文件、因特网、或者计算机里的采集卡、数字摄像机等,然后将数据往下传输;变换过滤器(TransformFilters)主要负责数据的格式转换、传输;提交过滤器(Rendering Filters)主要负责数据的最终去向,我们可以将数据送给声卡、显卡进行多媒体的演示,也可以输出到文件进行存储。值得注意的是,这三类过滤器并不是都只有一个Filter去完成功能。恰恰相反,每个部分往往是有几个Fitler协同工作的。比如,Transform Filters可能包含了一个Mpeg的解码Filter、以及视频色彩空间的转换Filter、音频采样频率转换Filter等等。除了系统提供的大量Filter外,我们可以定制自己的Filter,以完成我们需要的功能。
鉴于用户在播放视频文件的时候,经常做的操作是快进/快退/暂停/定位播放等操作。当用户在服务器端进行这些操作时,源过滤器可以检测到视频文件的变化,因此可以通过变换过滤器、提交过滤器把这些视频文件变化的数据反应到客户端,于是判断得出是否由于视频文件的播放而导致服务器端桌面屏幕的图像数据发生变化。
如果用户是在客户端进行快进/快退/暂停/定位播放等操作,那么客户端需要把这些命令通过网络发送到服务器端,然后服务器端把这些命令发送给源过滤器,源过滤器对正在播放的视频媒体文件进行操作,以完成客户端的操作。
如果用户在服务器端同时打开多个媒体进行播放,那么在源过滤器中就可以得到多个数据,这时候可以根据用户的具体情况,决定是否同时传输这多路信息。
步骤S108:服务器端查询客户端是否支持播放在服务器端桌面上播放的视频文件,如果支持,则执行步骤S109,否则,执行步骤S110。
步骤S109:服务器端读取其上所播放的视频文件数据,并将该数据发送给客户端。
步骤S110:服务器端读取其上所播放的视频文件数据,将该数据进行转码后发送给客户端。
通过转码,使服务器端桌面上播放的视频文件进行格式转换,具体实现上,可以将该视频文件的格式转换为mpeg2或者其他客户端支持的格式。
步骤S111:服务器端发送发生变化的屏幕图像数据或整个屏幕图像数据给客户端。
在该步骤中,可以通过现有的抓屏处理技术获取发生变化的屏幕数据和整个屏幕数据。
例如,利用图形驱动接口GDI技术、DirectX技术等抓屏处理技术定时截取当前服务器端桌面上整个屏幕的图像数据,并将本次截取到的图像数据与前次截取到的图像数据进行比较,比较屏幕图像数据发生的差异,然后对发生变化的屏幕数据进行压缩后发送到客户端。或者利用图形驱动接口GDI技术、DirectX技术等抓屏处理技术定时截取当前服务器端桌面上整个屏幕的图像数据,然后直接将整个屏幕的图像数据发送给客户端。
步骤S112:客户端对服务器发送来的数据进行解析并在本地进行播放。
通过上述步骤S108、S109、S110可以确保服务器端桌面上播放的视频文件在客户端能够正常播放。
在本发明中,对于本发明所应用的DirectShow系统,当用户打开远程桌面上的视频文件开始播放时,源过滤器(Source Filter)得到视频媒体文件的数据,然后传输给变换过滤器(Transform Filters),根据上述步骤S108可以得知客户端是否支持服务器端桌面上播放的视频文件的格式,变换过滤器可以根据步骤S108的查询结果来决定是否对服务器端桌面上播放的视频文件进行格式转换(即转码),然后传输给提交过滤器,提交过滤器再通过网络把所播放的视频文件数据发送给客户端。客户端收到视频文件数据后进行解析,并在本地进行播放。
在这里,需要变换过滤器对服务器端桌面上播放的视频文件进行格式转换,可以将该视频文件的格式转换为mpeg2或者其他客户端支持的格式。
在传输给提交过滤器前,可以使用快速的压缩算法对数据进行压缩,以减少网络的数据流量。
基于上述本发明提供的一种显示远程桌面内容的方法,本发明还提供了一种显示远程桌面内容的装置,参见图3,包括:
连接单元301,用于在服务器端与客户端之间建立连接关系;
检测单元302,用于实时检测服务器端桌面上的屏幕图像数据是否发生变化;
判断单元303,用于在服务器端桌面上的屏幕图像数据发生变化时,判断引起屏幕图像数据发生变化的原因;
处理发送单元304,用于根据引起服务器端桌面上屏幕图像数据发生变化的原因,对服务器端桌面上屏幕图像数据进行相应处理发送给客户端。
其中,所述检测单元302通过监控显卡的显存是否发生变化或者Windows系统的应用程序接口来实时检测服务器端桌面上的屏幕图像数据是否发生变化。
所述处理发送单元304当由于视频文件的播放引起服务器端桌面上屏幕图像数据发生变化时,读取视频文件数据,并将视频文件数据发送给客户端;当不是由于视频文件的播放引起其桌面上屏幕图像数据发生变化时,发送发生变化的屏幕图像数据或整个屏幕图像数据给客户端。
此外,本发明提供的装置还包括查询转码单元,该单元用于查询客户端是否支持播放在服务器端桌面上播放的视频文件,如果不支持,转码服务器端桌面上播放的视频文件。
需要说明的是,上述本发明提供的显示远程桌面内容的装置可以为服务器端和客户端之外的装置,也可以和服务器端或客户端集成在一起,参见图4,为本发明提供的显示远程桌面内容的装置集成在服务器端时的框架图。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。