图形渲染指令流处理装置、处理方法、服务器及渲染方法与流程

文档序号:30345165发布日期:2022-06-08 09:00阅读:452来源:国知局
图形渲染指令流处理装置、处理方法、服务器及渲染方法与流程

1.本发明涉及计算机领域,具体涉及一种图形渲染指令流处理装置、处理方法、服务器及渲染方法。


背景技术:

2.云应用领域中,云端服务器基本存在两种架构,一种是基于soc(system on chip,片上系统)的arm(advanced risc machines,先进精简指令集机器)阵列,另一种是基于arm大核服务器并外挂pci(peripheral component interconnect,外设部件互连标准)显卡。基于arm大核服务器并外挂pci显卡的云应用架构下,成熟的云应用方案基本上都是基于开源anbox(在linux系统中运行安卓android应用的开源项目)的,该方案依赖linux系统的x11(x window system,x窗口系统)和桌面系统xorg作为底层显示,而x11和xorg的配置复杂,效率低下。


技术实现要素:

3.针对现有技术存在的技术问题,本技术实施例提供一种图形渲染指令流处理装置、处理方法、服务器及渲染方法。
4.第一方面,本技术实施例提供了一种图形渲染指令流处理装置,包括:图形指令转换库、虚拟显示终端和推流器;其中,所述图形指令转换库,用于接收虚拟机通过透传接口透传的android系统的图形渲染指令流,将所述图形渲染指令流转换成显卡驱动的第一api接口可识别的格式,并调用所述第一api接口以对转换后的图形渲染指令流进行处理,其中,所述虚拟机采用显卡虚拟化技术加载所述显卡驱动,并提供所述透传接口,或者所述虚拟机加载virtual io驱动,并提供所述透传接口;所述虚拟显示终端,用于通过所述显卡驱动的第二api接口获取显卡处理得到的图像数据,其中,所述显卡为所述虚拟机的宿主机的外挂显卡,所述宿主机为运行linux系统的服务器;所述推流器,用于从所述虚拟显示终端采集图像数据,通过编码器对所述图像数据进行编码,并将编码后的图像数据推流给终端进行显示。
5.第二方面,本技术实施例提供了一种基于前述图形渲染指令流处理装置的图形渲染指令流处理方法,包括:所述图形指令转换库接收所述虚拟机通过所述透传接口透传的所述图形渲染指令流,将所述图形渲染指令流转换成所述第一api接口可识别的格式,并调用所述第一api接口以对转换后的图形渲染指令流进行处理;所述虚拟显示终端通过所述第二api接口获取所述图像数据;所述推流器从所述虚拟显示终端采集图像数据,通过编码器对所述图像数据进行编码,并将编码后的图像数据推流给终端进行显示。
6.第三方面,本技术实施例提供了一种服务器,包括:外挂的显卡;其中,所述服务器运行linux系统,在所述linux系统中运行有虚拟机,所述虚拟机运行android系统,所述android系统的图形渲染指令流通过透传接口透传给图形渲染指令流处理装置,所述图形渲染指令流处理装置将所述图形渲染指令流转换成显卡驱动的第一api接口可识别的格式,并调用所述第一api接口以对转换后的图形渲染指令流进行处理,其中,所述虚拟机采用显卡虚拟化技术加载显卡驱动,并提供所述透传接口,或者所述虚拟机加载virtual io驱动,并提供所述透传接口;所述图形渲染指令流处理装置通过所述显卡驱动的第二api接口获取所述显卡处理得到的图像数据,将所述图像数据输出到虚拟显示终端,从所述虚拟显示终端采集图像数据,通过编码器对所述图像数据进行编码,并将编码后的图像数据推流给终端进行显示。
7.第四方面,本技术实施例提供了一种基于前述服务器的图形渲染方法,包括:所述android系统的图形渲染指令流通过所述透传接口透传给所述图形渲染指令流处理装置,所述图形渲染指令流处理装置将所述图形渲染指令流转换成所述显卡驱动的第一api接口可识别的格式,并调用所述第一api接口以对转换后的图形渲染指令流进行处理;所述图形渲染指令流处理装置通过所述显卡驱动的第二api接口获取所述显卡处理得到的图像数据,将所述图像数据输出到虚拟显示终端,从所述虚拟显示终端采集图像数据,通过编码器对所述图像数据进行编码,并将编码后的图像数据推流给终端进行显示。
8.本技术实施例提供的图形渲染指令流处理装置、处理方法、服务器及图形渲染方法,通过显卡虚拟化技术加载显卡驱动或者加载virtual io驱动,提供透传接口,通过图形渲染指令流处理装置将虚拟机通过透传接口透传的android系统的图形渲染指令流传给虚拟机的宿主机系统进行处理,并将显卡处理得到的图像数据输出到虚拟显示终端,在编码器对图像数据编码后,通过推流器将编码后的图像数据推流给终端进行显示,整个方案有别于已知的基于anbox的方案,实现简单,不依赖x11和xorg。
附图说明
9.图1为本技术实施例提供的一种图形渲染指令流处理装置的结构示意图;图2为本技术实施例提供的一种基于图1所述的图形渲染指令流处理装置的图形渲染指令流处理方法的流程示意图;图3为本技术实施例提供的一种服务器涉及的图形渲染指令流的处理流程示意图;图4为本技术实施例提供的另一种服务器涉及的图形渲染指令流的处理流程示意图;图5为本技术实施例提供的一种图形渲染方法的流程示意图。
具体实施方式
10.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,应当理解,本技术中附图
仅起到说明和描述的目的,并不用于限定本技术的保护范围。
11.另外,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本技术实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本技术的实施例的详细描述并非旨在限制要求保护的本技术的范围,而是仅仅表示本技术的选定实施例。基于本技术的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
12.为了使得本领域技术人员能够使用本技术内容,给出以下实施方式。对于本领域技术人员来说,在不脱离本技术的精神和范围的情况下,可以将这里定义的一般原理应用于其他实施例和应用场景。
13.需要说明的是,本技术实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。
14.参照图1所示,为本技术实施例提供的一种图形渲染指令流处理装置,包括:图形指令转换库10、虚拟显示终端11和推流器12;其中,所述图形指令转换库10,用于接收虚拟机通过透传接口透传的android系统的图形渲染指令流,将所述图形渲染指令流转换成显卡驱动的第一api接口可识别的格式,并调用所述第一api接口以对转换后的图形渲染指令流进行处理,其中,所述虚拟机采用显卡虚拟化技术加载所述显卡驱动,并提供所述透传接口,或者所述虚拟机加载virtual io驱动,并提供所述透传接口;所述虚拟显示终端11,用于通过所述显卡驱动的第二api接口获取显卡处理得到的图像数据,其中,所述显卡为所述虚拟机的宿主机的外挂显卡,所述宿主机为运行linux系统的服务器;所述推流器12,用于从所述虚拟显示终端11采集图像数据,通过编码器对所述图像数据进行编码,并将编码后的图像数据推流给终端进行显示。
15.本实施例中,可以理解的是,图形渲染指令流处理装置是介于虚拟机和linux系统之间进行指令转换和图像显示的模块。图形渲染指令流处理装置包括图形指令转换库10、虚拟显示终端11和推流器12,其中,图形指令转换库10会将虚拟机透传的android系统的图形渲染指令流(包括egl/opengl es指令流)进行格式转换,转换成显卡驱动的第一api接口可识别的格式,之后通过调用第一api接口将格式转换后的图形渲染指令流传给虚拟机的宿主机的linux系统的相应处理模块,并借助于宿主机的外挂显卡进行图形渲染。虚拟显示终端11作为android系统的虚拟显示器,图形渲染的结果可通过显卡驱动的第二api接口传给虚拟显示终端11,之后推流器12会从虚拟显示终端11采集图像数据,将图像数据传给编码器进行编码,获取编码器的编码结果,将编码结果推流给终端进行显示。所述第一api接口和第二api接口可以相同,也可以不同。需要说明的是,如果所述虚拟机采用显卡虚拟化技术加载所述显卡驱动,则linux系统的相应处理模块可以为图形指令流服务端libgfxstream_backend;如果所述虚拟机加载virtual io驱动,则linux系统的相应处理模块可以为图形指令流服务端libopenglrender,此种方式下,虚拟显示终端11可以集成在图形合成渲染模块opengl renderer中,所述opengl renderer通过第二api接口获取图形渲染的结果,对图形渲染的结果进行合成,并将合成后的结果输出到虚拟显示终端11,继而通过推流器12进行推流。
16.本技术实施例提供的图形渲染指令流处理装置,借助于图形指令转换库10将虚拟机通过透传接口透传的android系统的图形渲染指令流传给虚拟机的宿主机系统进行处理,并将显卡处理得到的图像数据输出到虚拟显示终端11,在编码器对图像数据编码后,借助于推流器12将编码后的图像数据推流给终端进行显示,整个方案有别于已知的基于anbox的方案,实现简单,不依赖x11和xorg。
17.在前述装置实施例的基础上,所述图形指令转换库,可以用于将转换后的图形渲染指令流通过所述第一api接口发送给所述linux系统的图形指令流服务端;所述推流器,可以用于将所述图像数据发送给所述linux系统的编码器,并接收所述编码器对所述图像数据进行编码后的结果。
18.本实施例中,可以理解的是,图形指令转换库在对虚拟机透传的图形渲染指令流进行格式转换后,可以通过第一api接口将转换后的图形渲染指令流传给linux系统的图形指令流服务端,之后图形指令流服务端会对转换后的图形渲染指令流进行解码,并通过宿主机的外挂显卡进行图形渲染,从而得到图像数据。然后图像数据可以通过第二api接口传给虚拟显示终端,推流器可以从虚拟显示终端获取到图像数据,将图像数据传给linux系统的编码器进行编码,并在编码后获取编码结果,将编码结果推流给终端。
19.参照图2所示,为本技术实施例提供的一种基于前述装置实施例所述的图形渲染指令流处理装置的图形渲染指令流处理方法,包括:s20、所述图形指令转换库接收所述虚拟机通过所述透传接口透传的所述图形渲染指令流,将所述图形渲染指令流转换成所述第一api接口可识别的格式,并调用所述第一api接口以对转换后的图形渲染指令流进行处理;s21、所述虚拟显示终端通过所述第二api接口获取所述图像数据;s22、所述推流器从所述虚拟显示终端采集图像数据,通过编码器对所述图像数据进行编码,并将编码后的图像数据推流给终端进行显示。
20.本技术实施例提供的图形渲染指令流处理方法,图形指令转换库将虚拟机通过透传接口透传的android系统的图形渲染指令流传给虚拟机的宿主机系统进行处理,并将显卡处理得到的图像数据输出到虚拟显示终端,在编码器对图像数据编码后,推流器将编码后的图像数据推流给终端进行显示,整个方案有别于已知的基于anbox的方案,实现简单,不依赖x11和xorg。
21.本技术实施例提供了一种服务器,包括:外挂的显卡;其中,所述服务器运行linux系统,在所述linux系统中运行有虚拟机,所述虚拟机运行android系统,云应用运行于所述虚拟机中,所述android系统的图形渲染指令流通过透传接口透传给图形渲染指令流处理装置,所述图形渲染指令流处理装置将所述图形渲染指令流转换成显卡驱动的第一api接口可识别的格式,并调用所述第一api接口以对转换后的图形渲染指令流进行处理,其中,所述虚拟机采用显卡虚拟化技术加载显卡驱动,并提供所述透传接口,或者所述虚拟机加载virtual io驱动,并提供所述透传接口;所述图形渲染指令流处理装置通过所述显卡驱动的第二api接口获取所述显卡处理得到的图像数据,将所述图像数据输出到虚拟显示终端,从所述虚拟显示终端采集图像数据,通过编码器对所述图像数据进行编码,并将编码后的图像数据推流给终端进行显示。
22.本技术实施例提供的服务器,通过显卡虚拟化技术加载显卡驱动或者加载virtual io驱动,提供透传接口,通过图形渲染指令流处理装置将虚拟机通过透传接口透传的android系统的图形渲染指令流传给虚拟机的宿主机系统进行处理,并将显卡处理得到的图像数据输出到虚拟显示终端,在编码器对图像数据编码后,将编码后的图像数据推流给终端进行显示,整个方案有别于已知的基于anbox的方案,实现简单,不依赖x11和xorg。
23.如图3所示为前述服务器实施例涉及的一种图形渲染指令流的处理流程示意图,参照图3,在前述服务器实施例的基础上,所述透传接口可以包括直接渲染管理器drm接口,所述android系统可以包括图形组件graphic,所述graphic可以包括图形库libegl和图形模拟库libegl_emulator,将所述libegl_emulator作为所述android系统的图形驱动库,所述图形渲染指令流处理装置包括图形指令转换库egl/gl translator、虚拟显示终端egl-headless display和推流器streamer;其中,所述android系统在加载所述libegl后,通过所述libegl_emulator对图形渲染指令流进行编码,并将编码后的图形渲染指令流通过显卡设备节点,并经所述drm接口透传给所述egl/gl translator,所述egl/gl translator对所述编码后的图形渲染指令流进行转换,并将转换后的图形渲染指令流通过所述第一api接口发送给图形指令流服务端libgfxstream_backend,所述libgfxstream_backend对所述转换后的图形渲染指令流进行解码,基于所述linux系统的图形库libegl和显卡图形库,通过所述显卡对解码后的图形渲染指令进行处理得到所述图像数据;所述libgfxstream_backend通过所述第二api接口将所述图像数据发送给所述图形渲染指令流处理装置,所述图形渲染指令流处理装置将所述图像数据输出到所述egl-headless display,所述egl-headless display通过所述streamer将所述图像数据发送给所述编码器,所述编码器对所述图像数据进行编码,并将编码后的图像数据发送给所述streamer,所述streamer将所述编码后的图像数据推流给所述终端进行显示。
24.本实施例中,可以理解的是,android系统的图形渲染指令流可以通过图形组件graphic进行编码,之后通过drm接口传给图形指令流转换模块gfxstream(即图形渲染指令流处理装置)的egl/gl translator,egl/gl translator可以对编码后的图形渲染指令流进行格式转换,并通过第一api接口传给libgfxstream_backend,libgfxstream_backend可以对转换后的图形渲染指令流进行解码,通过调用linux系统的图形库libegl和显卡图形库(图3中示出的是英伟达图形库libegl_nvidia),并利用外挂显卡对解码后的图形渲染指令进行处理得到图像数据。之后libgfxstream_backend可以将图像数据通过第二api接口传给egl-headless display。streamer可以采集传给egl-headless display的图像数据,并将图像数据传给编码器(图3中示出的是编码器ffmpeg加载英伟达标准驱动,通过英伟达编码库libnvidia-encode进行硬件编码)进行编码,获取编码后的图像数据,将编码后的图像数据传给终端的媒体播放器media player。
25.如图4所示为前述服务器实施例涉及的另一种图形渲染指令流的处理流程示意图,参照图4,在前述服务器实施例的基础上,所述透传接口可以包括pci-e物理层接口pipe,所述android系统可以包括图形组件graphic,所述graphic可以包括图形库libegl和图形模拟库libegl_emulator,将所述libegl_emulator作为所述android系统的图形驱动
库,所述图形渲染指令流处理装置可以包括图形指令转换库egl/gl translator、图形合成渲染模块opengl renderer和推流器streamer,所述opengl renderer集成有虚拟显示终端egl-headless display;其中,所述android系统在加载所述libegl后,通过所述libegl_emulator对图形渲染指令流进行编码,并将编码后的图形渲染指令流通过虚拟图形管道文件,并经所述pipe透传给所述egl/gl translator,所述egl/gl translator对所述编码后的图形渲染指令流进行转换,并将转换后的图形渲染指令流通过所述第一api接口发送给图形指令流服务端libopenglrender,所述libopenglrender对所述转换后的图形渲染指令流进行解码,基于所述linux系统的图形库libegl和显卡图形库,通过所述显卡对解码后的图形渲染指令进行处理得到所述图像数据;所述libopenglrender通过所述第二api接口将所述图像数据发送给所述opengl renderer,所述opengl renderer对所述图像数据进行合成,并将合成后的图像数据输出到所述egl-headless display,所述egl-headless display通过所述streamer将所述图像数据发送给所述编码器,所述编码器对所述图像数据进行编码,并将编码后的图像数据发送给所述streamer,所述streamer将所述编码后的图像数据推流给所述终端进行显示。
26.本实施例中,虚拟机加载virtual io驱动实现虚拟图形管道文件/dev/qemu_pipe的挂载,并提供pipe接口用于透传android系统的图形渲染指令流。如图4所示,android系统的图形渲染指令流可以通过图形组件graphic进行编码,之后通过pipe接口传给模拟器emulator(即图形渲染指令流处理装置)的egl/gl translator,egl/gl translator可以对编码后的图形渲染指令流进行格式转换,并通过第一api接口传给libopenglrender,libopenglrender可以对转换后的图形渲染指令流进行解码,通过调用linux系统的图形库libegl和显卡图形库(图4中示出的是英伟达图形库libegl_nvidia),并利用外挂显卡对解码后的图形渲染指令进行处理得到图像数据。之后libopenglrender可以将图像数据通过第二api接口传给opengl renderer进行合成,并将合成后的数据传输给egl-headless display(图4未示出)。streamer可以采集传给egl-headless display的图像数据,并将图像数据传给编码器(图4中示出的是编码器ffmpeg加载英伟达标准驱动,通过英伟达编码库libnvidia-encode进行硬件编码)进行编码,获取编码后的图像数据,将编码后的图像数据传给终端的媒体播放器media player。
27.在前述服务器实施例的基础上,所述编码器可以包括ffmpeg,所述ffmpeg加载显卡编码驱动,通过所述显卡编码驱动对所述图像数据进行硬件编码。
28.在前述服务器实施例的基础上,所述显卡可以为n卡,所述显卡图形库可以为英伟达图形库libegl_nvidia,所述显卡驱动可以为英伟达标准驱动,所述ffmpeg通过英伟达编码库libnvidia-encode对所述图像数据进行硬件编码。
29.本实施例中,可以理解的是,当所述显卡为n卡时,显卡驱动可以为英伟达标准驱动,该驱动提供标准egl/opengl es接口,android系统的图形渲染指令流的处理流程可以如图3或图4所示。除此之外,所述显卡可以为a卡,当所述显卡为a卡时,android系统的图形渲染指令流的处理流程整体与图3或图4所示的处理流程一致,所不同的是,显卡图形库和显卡编码库分别为a卡对应的显卡图形库和显卡编码库。
30.在前述服务器实施例的基础上,所述显卡虚拟化技术可以为virglrenderer。
31.本实施例中,需要说明的是,所述虚拟机采用显卡虚拟化技术加载显卡驱动实现显卡设备节点/dev/dri/renderd128的挂载,并提供drm接口用于透传android系统的图形渲染指令流。
32.在前述服务器实施例的基础上,所述服务器还可以包括:采用arm架构的大核cpu,其中,所述linux系统为采用arm架构的乌班图ubuntu,所述虚拟机可以为crosvm虚拟机或qemu虚拟机。
33.本实施例中,需要说明的是,linux系统除了可以为采用arm架构的乌班图ubuntu,还可以为采用x86架构的乌班图ubuntu等其它系统。
34.参照图5所示,为本技术实施例提供的一种基于前述服务器实施例所述的服务器的图形渲染方法,包括:s50、所述android系统的图形渲染指令流通过所述透传接口透传给所述图形渲染指令流处理装置,所述图形渲染指令流处理装置将所述图形渲染指令流转换成所述显卡驱动的第一api接口可识别的格式,并调用所述第一api接口以对转换后的图形渲染指令流进行处理;s51、所述图形渲染指令流处理装置通过所述显卡驱动的第二api接口获取所述显卡处理得到的图像数据,将所述图像数据输出到虚拟显示终端,从所述虚拟显示终端采集图像数据,通过编码器对所述图像数据进行编码,并将编码后的图像数据推流给终端进行显示。
35.本技术实施例提供的图形渲染方法,借助于图形渲染指令流处理装置将虚拟机通过透传接口透传的android系统的图形渲染指令流传给虚拟机的宿主机系统进行处理,并将显卡处理得到的图像数据输出到虚拟显示终端,在编码器对图像数据编码后,将编码后的图像数据推流给终端进行显示,整个方案有别于已知的基于anbox的方案,实现简单,不依赖x11和xorg。
36.术语解释:egl:opengl es 渲染 api 和本地窗口系统之间的一个中间接口层;opengl es:opengl三维图形api的子集,针对手机、pda和游戏主机等嵌入式设备而设计;opengl:英文全称为open graphics library,中文译文为开放图形库,其定义了一个跨编程语言、跨平台的编程接口的规格,不同厂商会有不同的实现方法,它主要用于三维图象(二维的亦可)绘制;api:英文全称为application programming interface,中文译文为应用程序编程接口;x86架构:英文全称为the x86 architecture,中文译文为微处理器执行的计算机语言指令集;pci-e:英文全称为peripheral component interconnect express,是一种高速串行计算机总线;crosvm:用于创建虚拟机的应用;qemu:一款开源的模拟器及虚拟机监管器。
37.以上仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉
本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1