一种基于虚拟显示器的截屏方法、装置和电子设备,应用于云桌面服务器,其特征在于,包括如下步骤:操作系统生成视频帧并存储至环形缓冲区,所述环形缓冲区位于操作系统的显卡缓存内存中;虚拟显示器获取当前的视频帧并进行锁定,实时获取编码配置对当前的视频帧进行编码,编码完成后,释放当前的视频帧并在所述环形缓冲区保存编码后的所述视频帧;应用程序定期或者得到通知后从所述环形缓冲区中获取编码后的视频帧,并通过网络进行发送。本发明专利技术从视频产生到编码,全程没有进行内存拷贝,减少内存拷贝造成的性能开销和损耗,可提升截屏效率。率。率。
【技术实现步骤摘要】
一种基于虚拟显示器的截屏方法、装置和电子设备
[0001]本专利技术涉及云桌面领域,特别是指一种基于虚拟显示器的截屏方法、装置和电子设备。
技术介绍
[0002]随着互联网技术的发展,云技术和云存储正越来越受到IT业界的关注,其应用也逐渐推广,获得了广泛的好评。
[0003]现有云桌面系统是基于虚拟桌面技术来实现的。在云桌面系统中,云桌面终端中基本无需安装应用程序,它通过特征的连接协议和云桌面服务器通信。云桌面终端显示用户交互桌面,云桌面终端将鼠标移动、点击、及键盘操作等通过数据的形式传输至云桌面服务器,云桌面服务器根据云桌面终端传输的数据渲染出对应的云桌面图像,然后对渲染出的云桌面图像进行截屏,并将截屏的云桌面图像回传至云桌面终端,以在云桌面终端中显示。
[0004]目前,出现了一种利用虚拟显示器实现截屏方案,具体如下:在云桌面服务器上安装有虚拟显示器,虚拟显示器用于对接收到的数据进行图像渲染,得到云桌面图像;在检测到虚拟显示器当前渲染得到的云桌面图像发生变化时,抓取虚拟显示器当前渲染得到的云桌面图像;将抓取的云桌面图像写入虚拟显示器对应的显卡内存;当检测到云桌面图像写入显卡内存中时,从显卡内存中查找到云桌面图像,并对云桌面图像进行编码;将编码后的云桌面图像发送至云桌面终端。
[0005]然而,采用这种方案,具有如下不足:虚拟显示器产生云桌面图像后,由应用把云桌面拷贝到内存进行编码,则每次云桌面图像输出都会产生至少一次拷贝,对于计算机的性能开销和损耗将不可忽视;并且截屏之后,进行系统通知,将事件告之应用程序,应用程序再进行编码,将整个行为与业务操作以及系统事件绑定,环节多,故而健壮性较弱。另外,通常应用编码时间比桌面图像变化的间隔长时,会出现跳帧现象,比如,第一帧编码尚未完成时,就生成了第二帧云桌面图像,等编码完成,此时只能获取第三帧云桌面图像;或者持续延迟现象,如缓冲所有桌面图像,但由于编码慢导致正在编码的图像远远早于当前最新桌面图像。因此,这种方案不适用于144fps、165等更高刷新率的显示。
技术实现思路
[0006]本专利技术的主要目的在于克服现有技术中的上述缺陷,提出一种基于虚拟显示器的截屏方法、装置和电子设备,减少内存拷贝造成的性能开销和损耗,可提升截屏效率。
[0007]本专利技术采用如下技术方案:
[0008]一种基于虚拟显示器的截屏方法,应用于云桌面服务器,其特征在于,包括如下步骤:
[0009]操作系统生成视频帧并存储至环形缓冲区,所述环形缓冲区位于操作系统的显卡缓存内存中;
[0010]虚拟显示器获取当前的视频帧并进行锁定,实时获取编码配置对当前的视频帧进行编码,编码完成后,释放当前的视频帧并在所述环形缓冲区保存编码后的所述视频帧;
[0011]应用程序定期或者得到通知后从所述环形缓冲区中获取编码后的视频帧,并通过网络进行发送。
[0012]优选的,若所述虚拟显示器获取当前的视频帧失败,则销毁所述虚拟显示器,创建新的虚拟显示器以获取当前的视频帧。
[0013]优选的,所述虚拟显示器调用系统函数进行锁定或释放所述视频帧;所述系统函数包括锁定函数和释放函数。
[0014]优选的,所述获取编码配置对当前的视频帧进行编码,具体包括如下:
[0015]获取当前的所述视频帧时,从所述操作系统的共享内存中获取最新的编码配置并与上一次的编码配置进行对比,判断是否需要重新创建编码器实例,若是,则初始化编码器实例,之后,获取编码器实例对象并结合最新的编码配置进行编码。
[0016]优选的,若所述环形缓冲区中存储满未取走的编码后的所述视频帧,则锁定所述编码后的所述视频帧,所述操作系统停止生成所述视频帧,直至至少一编码后的所述视频帧被取走,再释放编码后的所述视频帧。
[0017]优选的,所述操作系统对所述环形缓冲区中的未编码的所述视频帧和编码后的所述视频帧的状态进行管理。
[0018]优选的,所述操作系统按照设定的时间间隔生成视频帧,所述设定的时间间隔由帧率或屏幕刷新率或传输视频的网络速度决定;或者,当桌面发生变化时,所述操作系统生成视频帧。
[0019]优选的,所述应用程序为网络传输的业务程序。
[0020]一种基于虚拟显示器的截屏装置,应用于云桌面服务器,其特征在于,包括:
[0021]生成模块,生成视频帧并存储至环形缓冲区,所述环形缓冲区位于操作系统的显卡缓存内存中;
[0022]获取模块,获取当前的视频帧进行锁定;
[0023]编码模块,获取编码配置并根据编码配置对当前的所述视频帧进行编码,编码完成后,释放当前的视频帧并将编码后的所述视频帧存储至所述环形缓冲区;
[0024]发送模块,定期或者得到通知后从所述环形缓冲区中获取编码后的视频帧,并通过网络进行发送。
[0025]一种电子设备,其特征在于:包括处理器和存储器,所述处理器用于执行所述存储器中存储的截屏方法程序,以实现所述的基于虚拟显示器的截屏方法。
[0026]由上述对本专利技术的描述可知,与现有技术相比,本专利技术具有如下有益效果:
[0027]1、本专利技术中,编码后的视频帧存储至环形缓冲区,应用程序定期或者得到通知后从环形缓冲区中获取编码后的视频帧,并通过网络进行发送。从视频产生到编码,全程没有进行内存拷贝,减少内存拷贝造成的性能开销和损耗,可提升截屏效率。
[0028]2、本专利技术中,由于操作系统可按照设定的时间间隔生成视频帧,并且虚拟显示器获取当前的视频帧,视频输出时间间隔固定,所以视频数据输出频率较为平滑,且不受系统事件影响。
[0029]3、本专利技术中,虚拟显示器获取当前生成的所述视频帧时,锁定视频帧以便进行编
码,编码后释放视频帧以存入环形缓冲区,采用锁定视频帧的目的是避免视频帧还没来得及被编码就被新的视频帧覆盖,通过释放环形缓冲区的桌面图像纹理来控制操作系统云桌面图像的刷新时间、刷新频率。
[0030]4、本专利技术中,若环形缓冲区中存储满未取走的编码后的视频帧,则锁定编码后的视频帧,直至至少一编码后的视频帧被取走,操作系统停止生成视频帧,也就不会产生新的数据,则虚拟显示器对视频帧的获取也会暂停,帧率下降,刷新时间也自然下降,目的是为了更自由的控制截屏的频率,以达到后续的功能业务需求。
[0031]5、本专利技术中,通过虚拟显示器实现截屏和编码,并未将整个行为与业务操作和系统事件绑定,环节少,故而健壮性较强。
附图说明
[0032]图1为本专利技术方法的主流程图;
[0033]图2为本专利技术方法具体流程图;
[0034]图3为本专利技术装置的组成图;
[0035]以下结合附图和具体实施例对本专利技术作进一步详述。
具体实施方式
[0036]以下通过具体实施方式对本专利技术作进一步的描述。
[0037]这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种基于虚拟显示器的截屏方法,应用于云桌面服务器,其特征在于,包括如下步骤:操作系统生成视频帧并存储至环形缓冲区,所述环形缓冲区位于操作系统的显卡缓存内存中;虚拟显示器获取当前的视频帧并进行锁定,实时获取编码配置对当前的视频帧进行编码,编码完成后,释放当前的视频帧并在所述环形缓冲区保存编码后的所述视频帧;应用程序定期或者得到通知后从所述环形缓冲区中获取编码后的视频帧,并通过网络进行发送。2.如权利要求1所述的一种基于虚拟显示器的截屏方法,其特征在于,若所述虚拟显示器获取当前的视频帧失败,则销毁所述虚拟显示器,创建新的虚拟显示器以获取当前的视频帧。3.如权利要求2所述的一种基于虚拟显示器的截屏方法,其特征在于,所述虚拟显示器调用系统函数进行锁定或释放所述视频帧;所述系统函数包括锁定函数和释放函数。4.如权利要求1所述的一种基于虚拟显示器的截屏方法,其特征在于,所述获取编码配置对当前的视频帧进行编码,具体包括如下:获取当前的所述视频帧时,从所述操作系统的共享内存中获取最新的编码配置并与上一次的编码配置进行对比,判断是否需要重新创建编码器实例,若是,则初始化编码器实例,之后,获取编码器实例对象并结合最新的编码配置进行编码。5.如权利要求1所述的一种基于虚拟显示器的截屏方法,其特征在于:若所述环形缓冲区中存储满未取走的编码后的所述视频帧,则锁定所述编...
【专利技术属性】
技术研发人员:陈静芳,吴汉生,
申请(专利权)人:厦门创普云科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。