基于IP网络的屏幕共享和同步录制方法 【技术领域】
本发明涉及一种基于IP网络的提高屏幕图像处理效率的方法,具体涉及一种基于IP网络的屏幕共享和同步录制方法,属于图像处理技术领域。
背景技术
目前,基于IP网络的屏幕共享技术已广泛应用。其中的屏幕共享技术归纳为以下4种类型:1)采用NetMeeting SDK实现屏幕共享。这是微软的一种比较成熟的屏幕共享技术,通过单播方式将桌面或应用程序共享给其他与之连接的系统。运行性能好,稳定可靠。但存在以下不足:屏幕图像色彩不够丰富(256色);不支持多播方式共享,连接数目受带宽限制;屏幕操作不能保存,不能回放;需要复杂的MCU技术才能实现多点转发功能和级连功能,不易扩展。2)利用视频会议技术,通过摄像头采集屏幕数据进行视频处理和传输。原理简单,其稳定性完全依靠视频会议系统本身的稳定性,与具体的显卡无关。但是需要极高分辨率的视频采集器才能使图像比较清晰。由于经过数模/模数转换,图像效果自然不如从屏幕上直接观看,不可避免闪烁现象。3)利用屏幕快捕技术来共享屏幕。目前,有很多专业的屏幕快捕软件,其原理就是在抓屏时(利用DirectX,或相关API从显存中)拷贝全屏数据。通过连续抓屏来达到屏幕录制和共享的目的。实现简单。其缺点是:(1),每次都处理全屏数据,数据量巨大,需要较高的机器配置才能快速的处理完数据的压缩和传输。(2),从显存读取数据有快有慢,在读数据慢地显卡上几乎很难正常运行,而且CPU被长时间的占用,以至其他程序运行缓慢。4)利用显示驱动程序协同处理(性能优化)来实现屏幕共享。这种方式通过编写自己的显示驱动程序来捕获屏幕图像变化(类似于NetMeeting的原理),这样只需要处理屏幕变化部分的数据,速度快,效果好。对其他程序没有太大的影响。但是,该技术实现起来比较困难,在不同的系统下需要编写不同的显示驱动程序,而且不同的显卡其驱动又略有差别。可移植性差。安装驱动程序需要较高的管理员权限。
经文献检索发现,陈琦等人在《全国高校远程教育协作网》上(http://www.edu-sp.com/union/e-edu/e-edu02.htm、“学术田园”版面)撰文“屏幕共享技术及其在多媒体通信中的应用”,该文从共享方式上进行分析,提出两种基本的共享方式:XWindow下的基于GDI矢量指令的共享和Windows下的基于拷屏方式的共享。但该技术在不需要修改系统硬件资源和不需要管理员权限的情况下,实现提高屏幕共享的性能,包括:显示质量好,速度快,实现简单,可移植性好方面存在不足。
【发明内容】
本发明针对现有技术的不足和缺陷,提出了一种提高屏幕图像处理效率基于IP网络的屏幕共享和同步录制方法,采用运行于用户模式的系统消息钩子结合API钩子技术,使屏幕共享的性能大大提高,显示质量好,不需要修改系统硬件资源,不需要管理员权限,速度快,实现简单,可移植性好。
本发明是通过以下技术方案实现的,本发明包括以下步骤:
(1)同时安装系统消息钩子和API钩子获取并跟踪屏幕图像变化区域;
(2)根据屏幕图像变化区域从显卡读取变化后的屏幕图像数据;
(3)对屏幕图像变化区域和变化数据进行压缩编码;
(4)通过单播或多播两种方式发送屏幕数据;
(5)将屏幕数据保存为本地文件;
(6)对通过IP网络接收到的数据用与编码相反的规则进行解码;
(7)对解码后屏幕图像显示到指定窗口中。
以下对本发明方法作进一步的说明,具体内容如下:
1、同时安装系统消息钩子和API钩子获取并跟踪屏幕图像变化区域,具体如下:
(1)同时安装系统消息钩子和API钩子;
(2)在系统消息钩子处理模块中负责处理以下消息:窗口刷新消息、窗口位置变化消息、窗口大小变化消息、菜单显示消息、菜单退出消息;每个消息都对应一定的窗口图像变化信息和矩形信息,统计这些矩形信息,将这些矩形合并成一个区域。当截获到该窗口的移动消息后,得到新的窗口位置。
(3)在API钩子中负责处理以下API调用:TextOut、BitBlt、StretchBlt、SetDiBits,每一个API都对应一定的图像显示区域,这些区域是通过分析调用的参数得到。
(4)对上述两种方式得到的区域再进行合并,然后通过坐标转换将客户区域坐标转换为屏幕坐标,从而分析出当前屏幕图像变化区域。
系统消息钩子和API钩子的结合使用。在这些钩子处理模块中只分析屏幕图像变化区域。不做其他处理。系统消息钩子是一种可以捕获Windows系统消息的设备,API钩子是一种可以截获系统API调用的陷阱技术,该技术可以接管指定API的调用,从而分析调用的参数,得出对屏幕图像的影响。这两种钩子设备都必须是全局的。即针对整个系统中所有程序的窗口消息和API调用,而不是某一个或几个应用程序。
屏幕共享的前提是动态跟踪屏幕图像变化区域。通过只处理该区域数据的方法来减少图象处理的数据量,提高运行速度,降低带宽。不是每次都对全屏数据进行处理。在整个屏幕都没有变化的情况下,不对图像数据进行处理。
2、根据屏幕图像变化区域从显卡读取变化后的屏幕图像数据,具体如下:
使用GDI函数CreateDIBSection在系统内存中创建一张与屏幕同样大小的位图HBITMAP,再创建一个与屏幕兼容的设备上下文HDC,选入位图。将屏幕图像从显卡内存拷贝到系统内存可以使用GDI函数BitBlt。在参数中将前面创建的HDC作为目标设备上下文,将屏幕DC作为源设备上下文。其中还有几个用于确定拷贝区域的参数。该区域可以为屏幕中任意位置的一个矩形区域。通过将屏幕变化区域划分为多个矩形区域,多次应用BitBlt就可以读取该变化区域中的屏幕图像数据。
3、对屏幕图像变化区域和变化数据进行压缩编码,具体如下:
将屏幕图像细分,本发明采用4*4方式,即将整个屏幕分成4行4列。得到16个矩形。将屏幕图像变化区域影射到这16个小的矩形中。可以得出在每个小的矩形中的变化区域。为了编码方便,对变化区域简化处理:用该区域的外包矩形作为该区域的变化区域。这样屏幕的变化区域最多可以分成16个大小不等的矩形。4*4方式是中和区域的数量和区域的精确度两方面考虑的。分得越细,表示的区域就越精确,但会增加表示区域的数据量。划分太少,区域中未变化部分就多,就失去了跟踪变化区域的意义。屏幕编码是对每个小矩形中的图像数据分别编码。
编码流程:读取简化后的区域;读取该区域中的数据;对区域数据编码,在编码后的数据前加上该矩形的大小和数据的长度,新的数据添加到前一数据的后面;总的编码长度增加;直到16个区域编码结束。最后输出屏幕数据。对于屏幕中未变化部分,数据长度用0表示,不记录区域信息。该编码不仅记录了变化后的图像,同时记录了图像变化的区域。只编码变化部分,既减少了编码数据量,同时提高了编码速度。
4、通过单播或多播两种方式发送屏幕数据,具体如下:
单播方式下(一对一):共享程序监听某个端口(如:900),显示端通过TCP连接到共享程序。共享程序将编码后的数据通过TCP循环发送到显示端。单播方式下的共享数目受带宽和主机本身性能限制。于是在大规模的教学情况下,需采用多播方式。
多播方式下(一对多):共享程序只需将编码后的数据打包后一次发送到多播地址(如:228.7.7.7)。加入到该多播组的显示端从该多播地址接收数据。多播方式可以大大增加共享数目,而不影响共享程序的性能。由于多播方式受网络结构、丢包问题的限制,所以针对不同的情况采用了单播和多播相结合的方式发送屏幕数据。
5、将屏幕数据保存为本地文件,具体如下:
本发明采用两种方式保存屏幕数据:AVI文件(*.avi)和自定义文件(*.sr)。在屏幕数据编码后或接收到屏幕数据后按一定的格式保存到文件中。
AVI文件(*.avi):使用API(AVIFileOpen)创建AVI文件;创建屏幕流(AVIFileCreateStream);设置屏幕压缩格式(AVIStreamSetFormat)(本发明采用自己的屏幕压缩格式:CSMX)。保存屏幕数据(AVIStreamWrite)。关闭文件。
自定义文件(*.sr):使用与AVI类似的文件格式保存屏幕数据。自定义文件格式可以更加灵活:可以任意添加数据。数据结构更加紧凑。
6、对通过IP网络接收到的数据用与编码相反的规则进行解码,具体如下:
一个完整的IP数据包对应一帧屏幕数据,一帧屏幕数据由多个小的区域组成。按顺序解码每个小区域,解码流程如下:首先,接收图像数据,从数据头上读取该区域在屏幕中的位置大小信息,然后解码对应的屏幕数据,再将该数据移动到区域对应的位置,解码下一个区域,直到16个区域都解码完成。
7、对解码后屏幕图像显示到指定窗口中,具体如下:
本发明采用GDI方式显示图像,得到窗口的设备上下文(GetDC)。将屏幕数据显示到该设备上下文中(SetDIBitsToDevice)。释放设备上下文(ReleaseDC)。
本发明具有实质性特点和显著进步,本发明使得一般的PC机器在运行教学软件讲课的同时使屏幕通过网络共享到其他桌面并可以同步录制保存到本地文件,在屏幕共享及录制的同时不影响本机的显示和操作;图像质量好,不需要修改系统硬件资源,不需要管理员权限,速度快,实现简单,可移植性好,尤其对远程教学有着十分重要的利用价值。
【附图说明】
图1本发明的屏幕共享及同步录制系统的整体工作流程图
图2屏幕中窗口移动前后对屏幕图像的变化
图3屏幕中窗口移动后所得到的变化区域
图4在系统消息钩子中跟踪屏幕图像变化区域的流程图
图5对变化区域中图像编码的流程示意图
图6对编码数据解码并显示的流程示意图
【具体实施方式】
如图1、图2、图3、图4、图5和图6所示,结合本发明的内容提供以下实施例:
以远程教学为例。在电脑教学中,教师在电脑屏幕上的教学过程。常常投到大屏幕上让学生看。这种教学方式受教室和距离的限制,投影的清晰度有限。教学效果差。采用本发明的共享技术,学生就可以从身边电脑上看到与远端教师机上一模一样的教学过程,教师的教学过程不受影响。目前的技术有,NetMeeting的程序共享。该技术只使用TCP连接,可连接的学生数目受到很大限制。而且色彩不好,也不能保存。Windows Media Encode.可以克服NetMeeting的某些缺陷,广播屏幕教学,保存到文件。但是对主机性能要求很高。在一般的机器上很难运行该软件。由于CPU被一直大量占用,正常的教学过程很难进行。本发明在应用时占用很少系统资源。远程共享与同步录制一体化。采用16位色编码。图像效果好。本系统操作简单。
选择一台教师机和多台学生机。教师机建议配置,CPU:Intel奔腾III以上或赛扬1G以上。内存256M。操作系统:Win2000。学生机接近该配置就行。
1、在教师机上运行包括如图1、图4、图5所示步骤的程序。
(1)安装跟踪屏幕图像变化的设备101。这是通过同时安装系统消息钩子和API钩子来实现的。
(2)跟踪屏幕变化区域102。
图4给出了在系统消息钩子中跟踪屏幕图像变化区域的流程图。包括以下环节:Hook到系统消息,判断该消息是否影响屏幕图像显示;如果是,计算当前消息所影响到的屏幕区域。与前面得到的区域合并。简化区域,如图3,将复杂的区域映射到屏幕中16个小矩形区域中。判断是否继续分析,如果不是则输出当前变化区域。
(3)对屏幕图像区域进行编码103。
图5给出了对变化区域中图像编码的流程示意图。包括以下环节:读取简化后的区域。如图2、图3所示,将变化区域映射到更简单的区域中。图2中两个矩形表示窗口的运动,图3中矩形1,2,3,4,5为简化后的区域。读取该区域中的屏幕图像数据。对数据编码,采用有损和无损编码的结合。对图像采用有损编码(如:Jpeg)。对窗口,文字等简单显示,采用无损编码(如:Lzw)。编码数据前加上区域位置,大小和数据长度信息。但前编码数据长度增加。直到所有区域编码结束,输出编码数据。
(4)保存屏幕数据到本地文件104。
(5)以单播或多播方式发送屏幕数据到学生机上105。
2、在学生端运行包括如图6所示步骤的程序。
(1)学生登陆,连接到教师机程序。远地学生(跨教室),采用单播方式登陆连接到教师机上。本教室学生,采用多播方式加入到多播组。
(2)接收屏幕数据,解码后显示到指定窗口中。
图6给出了对编码数据解码并显示的流程示意图。包括以下步骤:接收屏幕数据。区域解码,图像解码。将解码后的图像数据排列到区域所对应的位置。显示图像到指定窗口。
使用本发明图像质量好,不需要修改系统硬件资源,不需要管理员权限,速度快,实现简单,可移植性好。