CN113286005B - 抓屏方法、装置、电子设备及存储介质 - Google Patents
抓屏方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113286005B CN113286005B CN202110581339.5A CN202110581339A CN113286005B CN 113286005 B CN113286005 B CN 113286005B CN 202110581339 A CN202110581339 A CN 202110581339A CN 113286005 B CN113286005 B CN 113286005B
- Authority
- CN
- China
- Prior art keywords
- cloud desktop
- desktop image
- texture
- container
- image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/08—Protocols specially adapted for terminal emulation, e.g. Telnet
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0484—Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/85—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Signal Processing (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Computer Networks & Wireless Communication (AREA)
- Human Computer Interaction (AREA)
- User Interface Of Digital Computer (AREA)
- Processing Or Creating Images (AREA)
Abstract
本申请提供的一种抓屏方法、装置、电子设备及存储介质,应用于安装有虚拟显示器的云桌面服务器,方法包括:在检测到虚拟显示器当前渲染的云桌面图像发生变化时,抓取虚拟显示器当前渲染的云桌面图像,将抓取的云桌面图像写入虚拟显示器对应的显卡内存中,当检测到云桌面图像写入显卡内存中时,从显卡内存中查找到该云桌面图像,并对该云桌面图像进行编码,将编码后的云桌面图像发送至云桌面终端。由于抓取的云桌面图像本身就存在云桌面服务器的显卡内存中,因此可以在显卡内存中直接对云桌面图像进行编码,无需将云桌面图像从系统内存复制到显卡内存中,因此更加高效,并且可以有效减少系统的CPU资源和内存资源的占用率。
Description
技术领域
本申请涉及云技术领域,尤其涉及一种抓屏方法、装置、电子设备及存储介质。
背景技术
随着互联网技术的发展,云计算和云存储正越来越受到IT业界的关注,其应用也逐渐推广,获得了广泛的好评。
现有云桌面系统是基于虚拟桌面技术来实现的。在云桌面系统中,云桌面终端中基本无需安装应用程序,它通过特征的连接协议和云桌面服务器通信。云桌面终端显示用户交互桌面,云桌面终端将鼠标移动、点击、及键盘操作等通过数据的形式传输至云桌面服务器,云桌面服务器根据云桌面终端传输的数据渲染出对应的云桌面图像,然后对渲染出的云桌面图像进行抓取,并将抓取的云桌面图像回传至云桌面终端,以在云桌面终端中显示。
目前云桌面服务器常用的抓屏方案,通常是将抓取的云桌面图像存储到系统内存中,然后再将系统内存存储的云桌面图像复制到显卡内存中进行编码,这使得抓屏效率较低。
发明内容
为克服相关技术中存在的抓屏效率较低的技术问题,本申请提供一种抓屏方法、装置、电子设备及存储介质。
第一方面,本申请提供了一种抓屏方法,应用于云桌面服务器,所述云桌面服务器上安装有虚拟显示器,所述虚拟显示器用于对接收到的数据进行图像渲染,得到云桌面图像,所述方法包括:
在检测到所述虚拟显示器当前渲染得到的云桌面图像发生变化时,抓取所述虚拟显示器当前渲染得到的云桌面图像;
将抓取的所述云桌面图像写入所述虚拟显示器对应的显卡内存;
当检测到所述云桌面图像写入所述显卡内存中时,从所述显卡内存中查找到所述云桌面图像,并对所述云桌面图像进行编码;
将编码后的所述云桌面图像发送至云桌面终端。
作为一种可能的实现方式,所述方法还包括:
在所述虚拟显示器的虚拟显示器驱动程序中创建D3D设备,并在所述D3D设备上创建多个纹理容器;
所述将抓取的所述云桌面图像写入所述虚拟显示器对应的显卡内存,包括:
从多个所述纹理容器中选择一个目标纹理容器;
将抓取的所述云桌面图像写入所述目标纹理容器。
作为一种可能的实现方式,所述从多个所述纹理容器中选择一个目标纹理容器,包括:
对多个所述纹理容器对应的时间戳进行比较,确定对应的时间戳最早的纹理容器,所述时间戳用于表征所述纹理容器中最近一次写入云桌面图像的时间;
将对应的时间戳最早的纹理容器确定为目标纹理容器。
作为一种可能的实现方式,在所述将抓取的所述云桌面图像写入所述目标纹理容器之后,所述方法还包括:
将所述目标纹理容器的时间戳更新为所述云桌面图像写入所述目标纹理容器的时间。
作为一种可能的实现方式,在所述D3D设备上创建多个纹理容器之后,所述方法还包括:
在本地内存中创建共享内存区,将多个所述纹理容器的ID和时间戳存储至所述共享内存区;
所述从所述显卡内存中查找到所述云桌面图像,包括:
从所述共享内存区中读取多个所述纹理容器的时间戳;
将时间戳距离当前时间最近的纹理容器确定为目标纹理容器;
确定所述目标纹理容器中存储的图像为所述云桌面图像。
第二方面,本申请实施例还提供了一种抓屏装置,应用于云桌面服务器,所述云桌面服务器上安装有虚拟显示器,所述虚拟显示器用于对接收到的数据进行图像渲染,得到云桌面图像,所述装置包括:
抓图模块,用于在检测到所述虚拟显示器当前渲染得到的云桌面图像发生变化时,抓取所述虚拟显示器当前渲染得到的云桌面图像;
写入模块,用于将抓取的所述云桌面图像写入所述虚拟显示器对应的显卡内存;
编码模块,用于当检测到所述云桌面图像写入所述显卡内存中时,从所述显卡内存中查找到所述云桌面图像,并对所述云桌面图像进行编码;
发送模块,用于将编码后的所述云桌面图像发送至云桌面终端。
作为一种可能的实现方式,所述装置还包括:
设置模块,用于在所述虚拟显示器的虚拟显示器驱动程序中创建D3D设备,并在所述D3D设备上创建多个纹理容器;
所述写入模块,包括:
选择子模块,用于从多个所述纹理容器中选择一个目标纹理容器;
写入子模块,用于将抓取的所述云桌面图像写入所述目标纹理容器。
作为一种可能的实现方式,所述选择子模块,具体用于:
对多个所述纹理容器对应的时间戳进行比较,确定对应的时间戳最早的纹理容器,所述时间戳用于表征所述纹理容器中最近一次写入云桌面图像的时间;
将对应的时间戳最早的纹理容器确定为目标纹理容器。
作为一种可能的实现方式,所述装置还包括:
更新模块,用于在所述将抓取的所述云桌面图像写入所述目标纹理容器之后,将所述目标纹理容器的时间戳更新为所述云桌面图像写入所述目标纹理容器的时间。
作为一种可能的实现方式,所述装置还包括:
共享内存创建模块,用于在所述D3D设备上创建多个纹理容器之后,在本地内存中创建共享内存区,将多个所述纹理容器的ID和时间戳存储至所述共享内存区;
所述编码模块,具体用于:
从所述共享内存区中读取多个所述纹理容器的时间戳;
将时间戳距离当前时间最近的纹理容器确定为目标纹理容器;
确定所述目标纹理容器中存储的图像为所述云桌面图像。
第三方面,本发明实施例还提供一种电子设备,包括:处理器和存储器,所述处理器用于执行所述存储器中存储的抓屏方法程序,以实现第一方面所述的抓屏方法。
第四方面,本发明实施例还提供一种存储介质,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现第一方面所述的抓屏方法。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:
本申请实施例提供的一种抓屏方法,应用于安装有虚拟显示器的云桌面服务器,在检测到虚拟显示器渲染的云桌面图像发生变化时,抓取虚拟显示器当前渲染的云桌面图像,将抓取的云桌面图像写入虚拟显示器对应的显卡内存中,当检测到云桌面图像写入显卡内存中时,从显卡内存中查找该云桌面图像,并对该云桌面图像进行编码,将编码后的云桌面图像发送至云桌面终端。由于抓取的云桌面图像本身就存在云桌面服务器的显卡内存中,因此可以在显卡内存中直接对云桌面图像进行编码,无需将云桌面图像从系统内存复制到显卡内存中,因此更加高效,并且可以有效减少系统的CPU资源和内存资源的占用率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1是根据一示例性实施例示出的一种云桌面系统的示意图。
图2是根据一示例性实施例示出的一种抓屏方法的流程图。
图3是根据另一示例性实施例示出的一种抓屏方法的流程图。
图4是根据一示例性实施例示出的一种抓屏装置的框图。
图5是根据一示例性实施例示出的一种电子设备的示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
参见图1,为本发明实施例提供的一种云桌面系统的示意图,如图1所示,该系统包括云桌面服务器101和云桌面终端102,云桌面服务器101和云桌面终端102之间通过特定的连接协议进行网络连接和通信,其中一个云桌面服务器可以对应多个云桌面终端,本实施例仅以云桌面服务器对应一个云桌面终端为例。
在本发明实施例中,云桌面服务器101并非为严格意义的上服务器,其也可以为计算机等设备,比如在用户甲通过电脑上的远程客户端控制用户乙的电脑时,用户乙的电脑则充当云桌面服务器的角色,用户甲的电脑则充当云桌面终端的角色。云桌面终端102可以为具有显示屏的终端,包括但不限于智能手机、笔记本电脑、平板电脑、台式电脑等,本实施例仅以智能手机中为例。
为便于理解,下面先对云桌面系统的工作原理进行说明:
云桌面服务器101中安装有云桌面软件,用户在云桌面终端102中可以通过网页登录云桌面服务器101中安装的云桌面软件,之后用户在云桌面终端102上进行操作,云桌面终端102则将用户的操作信息发送至云桌面服务器101,云桌面服务器101结合云桌面终端102发送的操作信息生成对应的云桌面图像,并对云桌面图像进行抓取,然后将抓取的云桌面图像编码后传输至云桌面终端102,云桌面终端102对接收到的云桌面图像进行解码并显示,从而实现将云桌面图像展示给用户。
目前常规的云桌面产品提供有多种连接协议,比如RDP(RemoteDesktopProtocol,远程桌面协议)、VNC(Virtual Network Console,虚拟网络控制台)等。其中,部分软件与RDP并不兼容,也即RDP的应用兼容性较差,VNC的应用兼容性相对RDP而言好一些,尤其是针对游戏类软件,但用户在VNC下操作云桌面服务器时,在云桌面服务器的显示器上能够同等看见用户的操作和相应的图像,这就存在一定的安全隐患。
为了得到良好的应用兼容性并兼顾安全性,本发明实施例提供的云桌面系统采用“虚拟显示器+控制台登录+自定义协议”的远程管理方案。具体的,在云桌面服务器中安装虚拟显示器,利用虚拟显示器来“显示”云桌面图像,如此一来云桌面服务器便不需要再连接物理显示器,也就不会被偷窥,如果有人为云桌面服务器接上了显示器,则云桌面终端也会很容易侦测到,比如若有人为云桌面服务器连接上了显示器,则云桌面服务器相当于有两个显示器,此时云桌面终端的用户若滑动鼠标则可能会出现鼠标滑出边界的现象,如此用户则可以察觉到云桌面服务器中连接了其他显示器。进一步的,云桌面服务器和云桌面终端通过自定义协议连接可进一步提升安全性。
目前在云桌面系统中通常把虚拟显示器和抓屏两个环节分开实现,潜在性地增加了性能损耗。而且目前采用的抓屏方案,通常是将截取的云桌面图像先存储到系统内存中,然后再将系统内存中存储的云桌面图像复制到显卡内存中进行编码,这使得抓屏效率较低。
为了提高抓屏效率,本发明实施例提供了一种抓屏方法。
参见图2,为本发明一示例性实施例提供的一种抓屏方法的流程图,该方法应用于安装有虚拟显示器的云桌面服务器,其中,虚拟显示器用于对接收到的数据进行图像渲染,得到云桌面图像,比如云桌面服务器接收到与其连接的云桌面终端发送的操作信息,则虚拟显示器根据操作信息渲染出对应的云桌面图像。如图2所示,本实施例提供的抓屏方法可以包括如下步骤:
S21.在检测到云桌面图像发生变化时,抓取虚拟显示器当前渲染得到的云桌面图像。
在本发明实施例中,虚拟显示器通过集成有抓屏功能的虚拟显示器驱动创建,优选的,虚拟显示器驱动可以是IDD(Indirect Display Driver)模型,IDD模型是微软提供的一种用于实现虚拟显示器的驱动模型,相比于采用WDDM(Windows Display Driver Model)创建虚拟显示器,采用IDD模型创建虚拟显示器具有实现简单,兼容性强等优点。
在本发明实施例中,虚拟显示器驱动设置在云桌面服务器的驱动层中,云桌面服务器的应用层中可以安装多个云桌面软件,当应用层中安装的云桌面软件需要进行抓屏时,应用层可以使用常规的IO控制或进程间通信的方式向驱动层的虚拟显示器驱动发送抓屏请求,虚拟显示器驱动接收到抓屏请求后,会在检测到当前渲染得到的云桌面图像发生变化时,通过抓屏功能抓取虚拟显示器当前渲染得到的云桌面图像,这里的发生变化是指:当前渲染得到的云桌面图像与前一次渲染得到的云桌面图像不同。
在实际应用中,云桌面服务器中设置有用于对窗口进行管理的窗口管理器,窗口管理器可以监测云桌面服务器中的云桌面图像,当窗口管理器检测到云桌面图像发生变化时,会通知虚拟显示器驱动,如此,虚拟显示器驱动能够检测到云桌面图像发生变化,进而调用抓屏功能抓取虚拟显示器当前渲染得到的云桌面图像。
作为一个实施例,虚拟显示器驱动中的抓屏功能可以通过用于抓屏的API实现。以虚拟显示器驱动为IDD模型为例,IDD模型中预置有用于抓屏的API,通过调用用于抓屏的API即可实现对渲染的云桌面图像的抓取。具体的,在抓屏时,IDD模型通过调用IddCxSwapChainReleaseAndAcquireBuffer这一函数从关联的SwapChain中取得新的缓冲区,利用新的缓冲区中的MetaData.pSurface->QueryInterface函数去获取ID3D11Texture2D类型的资源,从而实现抓屏。其中,SwapChain是一系列虚拟帧缓冲区。
S22.将抓取的云桌面图像写入虚拟显示器对应的显卡内存。
在本发明实施例中,在创建虚拟显示器后,可为虚拟显示器分配对应的显卡内存,在虚拟显示器抓取到云桌面图像后,将抓取的云桌面图像写入虚拟显示器对应的显卡内存中。
S23.当检测到云桌面图像写入显卡内存中时,从显卡内存中查找到该云桌面图像,并对该云桌面图像进行编码。
在本发明实施例中,虚拟显示器驱动在将抓取的云桌面图像写入虚拟显示器对应的显卡内存后,可发出表示截图完毕的通知,云桌面服务器的应用层监听到表示截图完毕的通知时,则可确定检测到云桌面图像写入显卡内存中,然后可以从虚拟显示器对应的显卡内存中查找写入的该云桌面图像,并按照预设的编码逻辑对查找到的该云桌面图像直接进行编码,此处的编码指的是硬编码,可以理解的是,除了对云桌面图像进行编码之外,还可以在显卡内存中对云桌面图像进行其他加工。
通过上述步骤可知,在本发明实施例中,将抓取的云桌面图像直接存储在虚拟显示器的显卡内存中,然后由应用层从显卡内存中查找该云桌面图像,并直接在显卡内存中对该云桌面图像进行编码,相比于现有的将抓取的云桌面图像存储在系统内存中,在进行编码时需要先将云桌面图像复制到显卡内存中再进行编码,本方案更加高效。
S24.将编码后的云桌面图像发送至云桌面终端。
在本发明实施例中,因为是在显卡内存中对云桌面图像进行编码,因此编码后的云桌面图像仍存储在显卡内存中,在将编码后的云桌面图像发送至云桌面终端时,将编码后的云桌面图像复制到系统内存中,然后通过系统内存将编码后的云桌面图像发送至云桌面终端。
作为一个实施例,若存在多个与云桌面服务器连接的云桌面终端,则从多个云桌面终端中确定触发应用层中云桌面软件的抓屏请求的云桌面终端,并将编码后的云桌面图像发送至该云桌面终端。
本发明实施例提供的一种抓屏方法,应用于安装有虚拟显示器的云桌面服务器,在检测到虚拟显示器当前渲染的云桌面图像发生变化时,抓取虚拟显示器当前渲染的云桌面图像,将抓取的云桌面图像写入虚拟显示器对应的显卡内存中,当检测到云桌面图像写入显卡内存中时,从显卡内存中查找到该云桌面图像,并对该云桌面图像进行编码,将编码后的云桌面图像发送至云桌面终端。由于抓取的云桌面图像本身就存在云桌面服务器的显卡内存中,因此可以在显卡内存中直接对云桌面图像进行编码,无需将云桌面图像从系统内存复制到显卡内存中,因此更加高效,并且可以有效减少系统的CPU资源和内存资源的占用率。
进一步的,本发明实施例中,将抓屏功能集成在虚拟显示器驱动中,相比于对虚拟显示器和抓屏功能分开实现,减少了性能损耗。
再进一步的,本发明实施例提供的抓屏方法,可以对云桌面服务器中的任一云桌面图像进行抓取,而现有的GDI抓图对部分使用硬件加速的画面无法捕获,现有的DXGI抓图无法在系统服务下使用,并且无法捕获安全桌面,因此,相比于DXGI抓图和GDI抓图,本方案使用范围更广。
参见图3,为本发明另一实施例提供的一种抓屏方法的流程图,该方法应用于安装有虚拟显示器的云桌面服务器,其中虚拟显示器用于对接收到的数据进行图像渲染,得到云桌面图像。为了提高虚拟显示器的渲染效果,在用于创建虚拟显示器的虚拟显示器驱动中还创建有支持共享的D3D设备(比如D3D11、D3D12等),并在D3D设备上创建多个可以与应用层共享的纹理容器(比如2D纹理)。其中D3D设备是显卡的抽象,D3D设备对应的显卡内存即为虚拟显示器对应的显卡内存,纹理容器可以是2D纹理,用于对抓取的云桌面图像进行存储。
进一步地,作为一个实施例,可静态创建纹理容器,这也就意味着,纹理容器一旦被创建,其数量、ID将保持固定不变。在该种情况下,则可在创建纹理容器之后,在应用层设置已创建的纹理容器的ID,从而实现应用层能够获取到纹理容器的ID,进而访问纹理容器,实现纹理容器的共享。
作为另一个实施例,可动态创建纹理容器,这也就意味着,纹理容器的数量可变。在该种情况下,为实现纹理容器的共享,可在云桌面服务器的本地内存中创建可供应用层访问的共享内存区,将多个纹理容器的ID写入该共享内存区中,从而实现应用层能够获取到纹理容器的ID,进而访问纹理容器,实现纹理容器的共享。
在该实施例中,作为一个可选的实现方式,可先检测是否接收到应用层发送的抓屏请求,若接收到抓屏请求则创建共享内存区,若未接收到抓屏请求,则可以先不创建共享内存区,以减少本地内存的占用。
再进一步的,每一纹理容器还对应有一个时间戳,用于表征纹理容器中最近一次写入云桌面图像的时间。可以理解的是,在动态创建纹理容器的情况下,上述共享内存区中还可存储每一纹理容器的时间戳。
基于上述内容,如图3所示,本实施例提供的抓屏方法可以包括如下步骤:
S31.在检测到虚拟显示器当前渲染的云桌面图像发生变化时,抓取虚拟显示器当前渲染得到的云桌面图像。
本步骤的详细描述可以参见上述S21中的描述,此处不再赘述。
S32.从D3D设备中的多个纹理容器中选择一个目标纹理容器。
S33.将抓取的云桌面图像写入目标纹理容器。
由于一个纹理容器每次只能写入一个图像,在写入新的云桌面图像时会覆盖之前写入的云桌面图像,导致之前写入的云桌面图像无法再读取,因此,
在本发明实施例中,虚拟显示器驱动可以从多个纹理容器中选择对应的时间戳最早的纹理容器作为目标纹理容器,将抓取到的云桌面图像写入目标纹理容器。可以理解的是,纹理容器对应的时间戳越早,意味着其上次写入云桌面图像的时间越早,而云桌面图像写入的时间越早则意味着其已经传输至云桌面终端的概率就越大,因此,选择对应的时间戳最早的纹理容器作为目标纹理容器,可以有效避免未发送至云桌面终端的云桌面图像被覆盖。
其中,在动态创建纹理容器的情况下,虚拟显示器驱动可以从共享内存区中获取多个纹理容器对应的时间戳,然后对多个纹理容器对应的时间戳进行比较,根据比较结果,将对应的时间戳最早的纹理容器确定为目标纹理容器。进一步地,虚拟显示器驱动从共享内存区中获取目标纹理容器的ID,然后基于获取的ID将抓取的云桌面图像写入到目标纹理容器中。
此外,在本发明实施例中,在将抓取的云桌面图像写入目标纹理容器之后,还可将目标纹理容器的时间戳更新为云桌面图像写入目标纹理容器的时间。
S34.当检测到云桌面图像写入目标纹理容器中时,对目标纹理容器中存储的云桌面图像进行编码。
在本发明实施例中,在虚拟显示器驱动将抓取的云桌面图像写入到目标纹理容器之后,可发出表示截图完毕的通知,当云桌面服务器的应用层监听到表示截图完毕的通知时,则可确定检测到云桌面图像写入到目标纹理容器中,然后确定出目标纹理容器,并对目标纹理容器中存储的云桌面图像按照预设的编码逻辑进行编码。
由上述描述可知,在将云桌面图像写入目标纹理容器之后,可将目标纹理容器的时间戳更新为云桌面图像写入的时间,因此,在本步骤中,将时间戳距离当前时间最近的纹理容器确定为目标纹理容器,然后获取目标纹理容器的ID,基于获取到的ID访问目标纹理容器,并对其中存储的云桌面图像按照预设的编码逻辑进行编码。
S35.将编码后的云桌面图像发送至云桌面终端。
在本发明实施例中,在对云桌面图像进行编码后,在将编码后的云桌面图像传输至云桌面终端时,先将编码后的云桌面图像复制到系统内存中,然后再由系统内存将编码后的云桌面图像发送至云桌面终端以进行显示。
本实施例提供的抓屏方法,直接在虚拟显示器驱动内集成抓屏功能,并将抓到的云桌面图像直接存储至虚拟显示器的显卡内存中,便于在显卡内存中对抓取的云桌面图像进行硬编码等加工,充分利用显卡内存的优势,无需在将云桌面图像从系统内存中复制到显卡内存中,使得抓屏效率更高。
本发明任一实施例提供的抓屏方法适用于云桌面、云游戏、远程控制软件,尤其适用于云桌面,若应用于云游戏,则适合全屏的游戏。
参见图4,为本发明另一实施例提供的一种抓屏装置的示意图,该抓屏装置可以应用于云桌面服务器,云桌面服务器上安装有虚拟显示器,其中虚拟显示器用于对接收到的数据进行图像渲染,得到云桌面图像。如图4所示,本实施例提供的抓屏装置可以包括:
抓图模块401,用于在检测到虚拟显示器当前渲染得到的云桌面图像发生变化时,抓取虚拟显示器当前渲染得到的云桌面图像。
写入模块402,用于将抓取的云桌面图像写入虚拟显示器对应的显卡内存。
编码模块403,用于当检测到云桌面图像写入显卡内存中时,从显卡内存中读取云桌面图像,从所述显卡内存中查找到该云桌面图像,并对该云桌面图像进行编码。
发送模块404,用于将编码后的云桌面图像发送至云桌面终端。
作为一个实施例,上述装置还可以包括:(图4中未示出)
设置模块,用于在虚拟显示器的虚拟显示器驱动程序中创建D3D设备,并在所述D3D设备上创建多个纹理容器;
写入模块402,可以包括:
选择子模块,用于从多个所述纹理容器中选择一个目标纹理容器;
写入子模块,用于将抓取的所述云桌面图像写入所述目标纹理容器。
作为一个实施例,选择子模块,具体用于:
对多个纹理容器对应的时间戳进行比较,确定对应的时间戳最早的纹理容器,时间戳用于表征纹理容器中最近一次写入云桌面图像的时间;
将对应的时间戳最早的纹理容器确定为目标纹理容器。
作为一个实施例,上述装置还可以包括(图4中未示出):
更新模块,用于在将抓取的云桌面图像写入目标纹理容器之后,将目标纹理容器的时间戳更新为云桌面图像写入目标纹理容器的时间。
作为一个实施例,上述装置还包括(图4中未示出):
共享内存创建模块,用于在D3D设备上创建多个纹理容器之后,在本地内存中创建共享内存区,将多个纹理容器的ID和时间戳存储至共享内存区;
编码模块403,具体用于:
从共享内存区中读取多个纹理容器的时间戳;
将时间戳距离当前时间最近的纹理容器确定为目标纹理容器;
确定所述目标纹理容器中存储的图像为所述云桌面图像。
参见图5,图5是本申请的另一实施例提供的一种电子设备的结构示意图。
如图5所示,本实施例提供的电子设备包括:至少一个处理器501、存储器502、至少一个网络接口503和其他用户接口504。电子设备500中的各个组件通过总线系统505耦合在一起。可理解,总线系统505用于实现这些组件之间的连接通信。总线系统505除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图5中将各种总线都标为总线系统505。
其中,用户接口504可以包括显示器、键盘或者点击设备(例如,鼠标,轨迹球(trackball)、触感板或者触摸屏等。
可以理解,本发明实施例中的存储器502可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data RateSDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synch link DRAM,SLDRAM)和直接内存总线随机存取存储器(DirectRambus RAM,DRRAM)。本文描述的存储器502旨在包括但不限于这些和任意其它适合类型的存储器。
在一些实施方式中,存储器502存储了如下的元素,可执行单元或者数据结构,或者他们的子集,或者他们的扩展集:操作系统5021和第二应用程序5022。
其中,操作系统5021,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。第二应用程序5022,包含各种第二应用程序,例如媒体播放器(Media Player)、浏览器(Browser)等,用于实现各种应用业务。实现本发明实施例方法的程序可以包含在第二应用程序5022中。
在本发明实施例中,通过调用存储器502存储的程序或指令,具体的,可以是第二应用程序5022中存储的程序或指令,处理器501用于执行各方法实施例所提供的方法步骤,例如包括:
在检测到虚拟显示器当前渲染得到的云桌面图像发生变化时,抓取虚拟显示器当前渲染得到的云桌面图像;
将抓取的云桌面图像写入虚拟显示器对应的显卡内存;
当检测到云桌面图像写入显卡内存中时,从显卡内存中查找到该云桌面图像,并对该云桌面图像进行编码;
将编码后的云桌面图像发送至云桌面终端。
上述本发明实施例揭示的方法可以应用于处理器501中,或者由处理器501实现。处理器501可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器501中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器501可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件单元组合执行完成。软件单元可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器502,处理器501读取存储器502中的信息,结合其硬件完成上述方法的步骤。
可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(ApplicationSpecific Integrated Circuits,ASIC)、数字信号处理器(Digital Signal Processing,DSP)、数字信号处理设备(DSPDevice,DSPD)、可编程逻辑设备(Programmable LogicDevice,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请功能的其它电子单元或其组合中。
对于软件实现,可通过执行本文功能的单元来实现本文的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
本发明实施例还提供了一种存储介质(计算机可读存储介质)。这里的存储介质存储有一个或者多个程序。其中,存储介质可以包括易失性存储器,例如随机存取存储器;存储器也可以包括非易失性存储器,例如只读存储器、快闪存储器、硬盘或固态硬盘;存储器还可以包括上述种类的存储器的组合。
当存储介质中一个或者多个程序可被一个或者多个处理器执行,以实现上述在电子设备侧执行的抓屏方法。
处理器用于执行存储器中存储的抓屏方法程序,以实现以下在电子设备侧执行的抓屏方法的步骤:
在检测到虚拟显示器当前渲染的云桌面图像发生变化时,抓取虚拟显示器当前渲染得到的云桌面图像;
将抓取的云桌面图像写入虚拟显示器对应的显卡内存;
当检测到云桌面图像写入显卡内存中时,从显卡内存中查找该云桌面图像,并对该云桌面图像进行编码;
将编码后的云桌面图像发送至云桌面终端。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。
需要说明的是,在本申请的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是指至少两个。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (10)
1.一种抓屏方法,其特征在于,应用于云桌面服务器,所述云桌面服务器上安装有虚拟显示器,所述虚拟显示器用于对接收到的数据进行图像渲染,得到云桌面图像,所述方法包括:
在检测到所述虚拟显示器当前渲染得到的云桌面图像发生变化时,抓取所述虚拟显示器当前渲染得到的云桌面图像;
在所述虚拟显示器的虚拟显示器驱动程序中创建D3D设备,并在所述D3D设备上创建多个纹理容器;
将抓取的所述云桌面图像写入所述虚拟显示器对应的显卡内存,包括:从多个所述纹理容器中选择一个目标纹理容器;将抓取的所述云桌面图像写入所述目标纹理容器;
当检测到所述云桌面图像写入所述显卡内存中时,从所述显卡内存中查找到所述云桌面图像,并在所述显卡内存中对所述云桌面图像进行编码;
将编码后的所述云桌面图像发送至云桌面终端。
2.根据权利要求1所述的方法,其特征在于,所述从多个所述纹理容器中选择一个目标纹理容器,包括:
对多个所述纹理容器对应的时间戳进行比较,确定对应的时间戳最早的纹理容器,所述时间戳用于表征所述纹理容器中最近一次写入云桌面图像的时间;
将对应的时间戳最早的纹理容器确定为目标纹理容器。
3.根据权利要求2所述的方法,其特征在于,在所述将抓取的所述云桌面图像写入所述目标纹理容器之后,所述方法还包括:
将所述目标纹理容器的时间戳更新为所述云桌面图像写入所述目标纹理容器的时间。
4.根据权利要求3所述的方法,其特征在于,在所述D3D设备上创建多个纹理容器之后,所述方法还包括:
在本地内存中创建共享内存区,将多个所述纹理容器的ID和时间戳存储至所述共享内存区;
所述从所述显卡内存中查找到所述云桌面图像,包括:
从所述共享内存区中读取多个所述纹理容器的时间戳;
将时间戳距离当前时间最近的纹理容器确定为目标纹理容器;
确定所述目标纹理容器中存储的图像为所述云桌面图像。
5.一种抓屏装置,其特征在于,应用于云桌面服务器,所述云桌面服务器上安装有虚拟显示器,所述虚拟显示器用于对接收到的数据进行图像渲染,得到云桌面图像,所述装置包括:
抓图模块,用于在检测到所述虚拟显示器当前渲染得到的云桌面图像发生变化时,抓取所述虚拟显示器当前渲染得到的云桌面图像;
设置模块,用于在所述虚拟显示器的虚拟显示器驱动程序中创建D3D设备,并在所述D3D设备上创建多个纹理容器;
写入模块,用于将抓取的所述云桌面图像写入所述虚拟显示器对应的显卡内存,包括:从多个所述纹理容器中选择一个目标纹理容器;将抓取的所述云桌面图像写入所述目标纹理容器;
编码模块,用于当检测到所述云桌面图像写入所述显卡内存中时,从所述显卡内存中查找到所述云桌面图像,并在所述显卡内存中对所述云桌面图像进行编码;
发送模块,用于将编码后的所述云桌面图像发送至云桌面终端。
6.根据权利要求5所述的装置,其特征在于,所述写入模块,具体用于:
对多个所述纹理容器对应的时间戳进行比较,确定对应的时间戳最早的纹理容器,所述时间戳用于表征所述纹理容器中最近一次写入云桌面图像的时间;
将对应的时间戳最早的纹理容器确定为目标纹理容器。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
更新模块,用于在所述将抓取的所述云桌面图像写入所述目标纹理容器之后,将所述目标纹理容器的时间戳更新为所述云桌面图像写入所述目标纹理容器的时间。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
共享内存创建模块,用于在所述D3D设备上创建多个纹理容器之后,在本地内存中创建共享内存区,将多个所述纹理容器的ID和时间戳存储至所述共享内存区;
所述编码模块,具体用于:
从所述共享内存区中读取多个所述纹理容器的时间戳;
将时间戳距离当前时间最近的纹理容器确定为目标纹理容器;
确定所述目标纹理容器中存储的图像为所述云桌面图像。
9.一种电子设备,其特征在于,包括:处理器和存储器,所述处理器用于执行所述存储器中存储的抓屏方法程序,以实现权利要求1-4任一所述的抓屏方法。
10.一种存储介质,其特征在于,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现权利要求1-4任一所述的抓屏方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110581339.5A CN113286005B (zh) | 2021-05-26 | 2021-05-26 | 抓屏方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110581339.5A CN113286005B (zh) | 2021-05-26 | 2021-05-26 | 抓屏方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113286005A CN113286005A (zh) | 2021-08-20 |
CN113286005B true CN113286005B (zh) | 2023-01-20 |
Family
ID=77281981
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110581339.5A Active CN113286005B (zh) | 2021-05-26 | 2021-05-26 | 抓屏方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113286005B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115883854A (zh) * | 2021-09-29 | 2023-03-31 | 中兴通讯股份有限公司 | 云桌面显示方法、终端、云桌面系统、设备及可读介质 |
CN116088974A (zh) * | 2021-11-05 | 2023-05-09 | 华为云计算技术有限公司 | 一种虚拟桌面数据处理方法、设备及系统 |
CN114095762A (zh) * | 2021-11-23 | 2022-02-25 | 湖南麒麟信安科技股份有限公司 | 数据传输方法、装置、计算机设备及计算机可读存储介质 |
CN117093292A (zh) * | 2022-05-13 | 2023-11-21 | 华为云计算技术有限公司 | 云桌面的图像处理方法、装置、服务器和存储介质 |
CN117435112B (zh) * | 2023-12-20 | 2024-04-05 | 摩尔线程智能科技(成都)有限责任公司 | 数据处理方法、系统及装置、电子设备和存储介质 |
CN117435146A (zh) * | 2023-12-20 | 2024-01-23 | 摩尔线程智能科技(成都)有限责任公司 | 码流生成方法、系统及装置、电子设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111240631A (zh) * | 2020-02-20 | 2020-06-05 | 湖南麒麟信安科技有限公司 | 基于AMD显卡虚拟化传输Linux虚拟机屏幕画面的方法及系统 |
CN112486606A (zh) * | 2020-11-19 | 2021-03-12 | 湖南麒麟信安科技股份有限公司 | 一种基于Android系统的云桌面显示优化方法及系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108153573A (zh) * | 2017-12-26 | 2018-06-12 | 合肥中科云巢科技有限公司 | 云桌面图像更新方法及虚拟机 |
US10958640B2 (en) * | 2018-02-08 | 2021-03-23 | Citrix Systems, Inc. | Fast smart card login |
CN109343922B (zh) * | 2018-09-17 | 2022-01-11 | 广东微云科技股份有限公司 | 一种gpu虚拟化画面显示的方法及装置 |
CN110647375A (zh) * | 2019-09-23 | 2020-01-03 | 天津卓朗科技发展有限公司 | 云桌面的图像渲染方法、装置和云服务器 |
CN112486609B (zh) * | 2020-11-25 | 2022-09-16 | 湖南麒麟信安科技股份有限公司 | 一种基于云桌面的虚拟显卡实现方法和装置 |
-
2021
- 2021-05-26 CN CN202110581339.5A patent/CN113286005B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111240631A (zh) * | 2020-02-20 | 2020-06-05 | 湖南麒麟信安科技有限公司 | 基于AMD显卡虚拟化传输Linux虚拟机屏幕画面的方法及系统 |
CN112486606A (zh) * | 2020-11-19 | 2021-03-12 | 湖南麒麟信安科技股份有限公司 | 一种基于Android系统的云桌面显示优化方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN113286005A (zh) | 2021-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113286005B (zh) | 抓屏方法、装置、电子设备及存储介质 | |
EP2293192B1 (en) | Methods and systems for remoting three dimensional graphics | |
EP2417518B1 (en) | Methods and systems for prioritizing dirty regions within an image | |
US9106521B2 (en) | Method and system for visualizing an adaptive screen according to a terminal | |
US9715750B2 (en) | System and method for layering using tile-based renderers | |
CN113368492B (zh) | 渲染的方法、装置 | |
US10110653B2 (en) | Systems and methods for transmitting data | |
WO2017202175A1 (zh) | 一种视频压缩方法、装置及电子设备 | |
WO2022017096A1 (zh) | 屏幕录制方法、电子设备及计算机可读存储介质 | |
CN113778604A (zh) | 一种操作界面的展示方法、装置、电子设备和存储介质 | |
CN113626099B (zh) | 应用程序的启动方法、装置及电子设备 | |
CN108235144B (zh) | 播放内容获取方法、装置及计算设备 | |
WO2023020124A1 (zh) | 数据处理方法、装置、计算设备和系统 | |
CN114035903A (zh) | 实现Linux KVM虚拟机支持3D应用的方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |