一种基于虚拟化共享显存的多屏互动方法和系统与流程

文档序号:16879801发布日期:2019-02-15 22:01阅读:405来源:国知局
一种基于虚拟化共享显存的多屏互动方法和系统与流程

本发明涉及多媒体数据播放技术领域,更具体地,涉及一种基于虚拟化共享显存的多屏互动方法和系统。



背景技术:

hypervisor是一种运行在物理服务器和操作系统之间的中间层软件,它可以允许多个操作系统和应用共享一套基础物理硬件,又称为虚拟机监视器(virtualmachinemonitor)。hypervisor是所有虚拟化技术的核心,非中断的支持多工作负载迁移是hypervisor的基本功能。当硬件/操作系统上运行hypervisor时,hypervisor允许创建多个虚拟机,并且会给每一台虚拟机分配适量的内存,cpu,网络和磁盘资源,还会加载所有虚拟机的客户操作系统(guestos),并使得这些客户操作系统(guestos)运行。那么承载hypervisor运行的操作系统被称为hostos,运行在hypervisor提供的虚拟机上的操作系统被称为guestos。

在运行hypervisor系统的产品方案上,因为同一颗soc上运行着一个hostos和多个guestos,而每一个os可能对应着一个或者多个显示屏,那么guestos之间或者guestos与hostos之间的显示屏的同步显示将面临巨大挑战。

对于多屏幕互动解决方案,目前现有的解决方案主要有两种:第一种是在同一个系统中,通过多个屏幕共用同一个framebuffe来实现多个屏幕之间的同步显示;第二种是在不同的系统中,通过网络流媒体传输的方式将显示数据流从服务端发送到客户端显示;第一种方案能够很好的实现多屏幕同步显示,理论上并不会有延迟,但是它只适用于在同一个系统中进行多屏互动显示,并不能跨操作系统;第二种方案主要用于远程流媒体通信,但是由于网络通信协议与带宽的限制,在进行流媒体传输时,都需要将流媒体数据进行压缩后再传输,会导致副屏显示有较大的延迟,且图形可能失真,或者无法保持原画面的分辨率,从而影响显示效果。



技术实现要素:

本发明提供一种克服上述问题或者至少部分地解决上述问题的一种基于虚拟化共享显存的多屏互动方法和系统。

根据本发明的第一个方面,提供一种基于虚拟化共享显存的多屏互动方法,包括:

在hypervisor系统中构建一个共享显存shareframebuffer,将产生数据流的进程作为server端,并将server端的数据流存入shareframebuffer;

将每一个支持与server端实现多屏互动的进程作为client端,为每个client端构建一个私有显存framebuffer;

创建共享显存管理列表,将所有client端注册到共享显存管理列表中,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,以使client端从shareframebuffer或framebuffer中获取数据流并显示,实现client端与server端的多屏互动。

作为优选的,若client端与server端没有产生多屏同显操作时,client端以framebuffer作为显存,所有数据流均从framebuffer中获取,实现多屏异显。

作为优选的,将所述client端注册到共享显存管理列表中,具体包括:

通过name字段、shfb_addr字段、index字段、status字段将client端注册到共享显存管理列表中,其中name字段表示client端的名称,index字段记录client端的索引,shfb_addr字段记录着shareframebuffer的首地址,status字段表示当前client端是否支持多屏互动功能,其中,status字段值为1时表示支持多屏同显/多屏扩展功能,值为0时表示支持多屏异显功能。

作为优选的,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,包括:

server端上产生一个与某一个或多个client端多屏同显操作,并将共享显存管理列表中对应client端的status字段置1,并通知所有client端;

对应client端在共享显存管理列表中检测到server端要求与本client端进行多屏同显时,将本client端的显存设置为shareframebuffer。

作为优选的,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,还包括:

若server端上产生一个与某一个或多个client端取消多屏同显的操作时,server端将共享显存管理列表中对应client端的status字段置0,并通知所有client端;

对应client端收到通知后,将本client端的显存设置为framebuffer,实现多屏异显。

作为优选的,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,还包括:

client端将共享显存管理列表中对应自身的status字段置0,并将自身显存设置为framebuffer,以主动取消与server端的多屏同显。

作为优选的,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,还包括:

server端产生一个使client端作为server端的扩展屏时,server端在共享显存管理列表中将对应client端的status字段置1,并通知所有client端;

对应client端将自身显存设置为shareframebuffer,client端从shareframebuffer获取数据流进行显示,而client端要显示的数据流由server端产生输入到shareframebuffer;server端则重新申请一片私有内存作为自身的私有显存,并将server端显示的数据流均输入到本身的私有显存中。

根据本发明的第二个方面,提供一种基于虚拟化共享显存的多屏互动系统,包括:

server端,用于产生数据流,在hypervisor系统中构建一个共享显存shareframebuffer,并将server端的数据流存入shareframebuffer;

client端,用于与server端实现多屏互动,并在hypervisor系统中构建一个私有显存framebuffer;

创建共享显存管理列表,用于将所述client端注册到共享显存管理列表中,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,以使client端从shareframebuffer或framebuffer中获取数据流并显示,实现client端与server端的多屏互动。

根据本发明的第三个方面,提供一种基于虚拟化共享显存的多屏互动设备,包括:

至少一个处理器;以及

与所述处理器通信连接的至少一个存储器,其中:

所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如上述基于虚拟化共享显存的多屏互动方法。

根据本发明的第四个方面,提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如上述基于虚拟化共享显存的多屏互动方法。

本发明提出一种基于虚拟化共享显存的多屏互动方法和系统,通过在共享内存上构建共享显存shareframebuffer),hostos与每一个guestos均可以申请访问,使得当不同os对应的显示屏需要同步显示同一个画面时,只需要将显示画面的数据流存储在shareframebuffer中,而各个os从此显存获取数据流显示在显示屏上即可。此发明将泛化系统之间的概念,抽象每一个显示屏驱动/进程为一个client端,而产生数据流的进程(可能是播发器/流媒体等)为server端;保证不同os之间能够稳定和高效的实现同步显示互动。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为根据本发明实施例的基于虚拟化共享显存的多屏互动方法框图;

图2为根据本发明实施例的基于虚拟化共享显存的多屏互动方法具体流程示意图;

图3为根据本发明实施例的共享显存的使用示例图示意图;

图4为根据本发明实施例的基于虚拟化共享显存的多屏互动设备示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,一种基于虚拟化共享显存的多屏互动方法,包括:

在hypervisor系统中构建一个共享显存shareframebuffer,将产生数据流的进程作为server端,并将server端的数据流存入shareframebuffer;

将每一个支持与server端实现多屏互动的进程作为client端,为每个client端构建一个私有显存framebuffer;

创建共享显存管理列表,将所述client端注册到共享显存管理列表中,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,以使client端从shareframebuffer或framebuffer中获取数据流并显示,实现client端与server端的多屏互动。

在本实施例中,基于hypervisor系统中,guestos与guestos之间,guestos与hostos之间通过共享内存的方式解决多显示屏显示互动问题,通过在共享内存上构建共享显存(基于共享内存实现的显存,下文统称为shareframebuffer),hostos与每一个guestos均可以申请访问,使得当不同os对应的显示屏需要同步显示同一个画面时,只需要将显示画面的数据流存储在shareframebuffer中,而各个os从此显存获取数据流显示在显示屏上即可。将泛化系统之间的概念,抽象每一个显示屏驱动/进程为一个client端,而产生数据流的进程(可能是播发器/流媒体等)为server端;保证不同os之间能够稳定和高效的实现同步显示互动。

具体的,在hypervisor上为各个os实现shareframebuffer(共享显存),在需要多屏幕同步显示的场景中,hypervisor上的每一个os都从shareframebuffer中获取同步显示的流数据,然后在各自对应的显示屏中进行显示,这样可用保证跨系统的多个显示屏的同步显示。在需要实现主屏幕扩展的应用场景中,副屏同样将显存设置为shareframebuffer,而主屏再申请一个私有的内存作为framebuffer,存放主屏上显示的数据流,这样就可以实现主屏幕的扩展显示。而在多屏异显的场景中,主屏(在一个多屏幕显示的产品中,通常有且只有一个主屏,可以有多个副屏)所使用的显存还是shareframebuffer,但是其他所有副屏均使用自己的framebuffer,这样就可以实现跨系统多屏异显的场景。

本实施例在实现跨系统的多屏幕同步/扩展显示时,避免了对图像/视频流数据的拷贝、压缩和传输的过程,能够真正的实现同步显示,保证图像不失真,不延迟,并且也降低了cpu的占用,从而提高效率。

在上述实施例的基础上,若client端与server端没有产生多屏同显操作时,client端以framebuffer作为显存,所有数据流均从framebuffer中获取,实现多屏异显。

在上述各实施例的基础上,将所述client端注册到共享显存管理列表中,具体包括:

通过name字段、shfb_addr字段、index字段、status字段将client端注册到共享显存管理列表中,其中name字段表示client端的名称,index字段记录client端的索引,shfb_addr字段记录着shareframebuffer的首地址,status字段表示当前client端是否支持多屏互动功能,其中,status字段值为1时表示支持多屏同显/多屏扩展功能,值为0时表示支持多屏异显功能。

在本实施例中,在hypervidor的共享内存中的factorypage中shmem字段获取共享内存起始地址,将第一页(4kb)中的前1kb共享内存分配作为共享显存管理列表区域,建立共享显存管理列表,标记为fb_m。通过在共享内存的factorypage中的shmem字段获取共享内存起始地址,将第一个页(4kb)的前1k内存空间作为管理列表,将其称为fb_m字段,由server端(主屏)端在其中建立管理列表,并初始化(将参与支持多屏互动的每一个client端的信息分别添加到管理列表中),并在共享内存上申请共享显存shareframebuffer,并作为主屏的显存。当产生多屏互动操作时,server端将在对应client端的管理列表上将status字段进行操作,并产生中断通知client端。

统一由主屏端(即server端)的驱动程序建立共享显存管理列表,每个支持与主屏端进行多屏互动的os的信息都被注册在管理列表中成为client端,而主屏作为server端。name字段表示os的名称,index字段记录os的索引,每个os可用通过识别name与index来找到属于自己的管理区,shfb_addr字段记录着共享显存的首地址;status字段标志着当前本client是否支持多屏互动功能,值为1时标志当前支持多屏同显/多屏扩展功能,值为0时标志当前支持多屏异显功能。

对于fb_m管理列表,server端(主屏端)对所有client端的列表区域有可读可写属性;而每一个client端只能对自身的列表区域有可读可写属性,对其他所有列表区域只具有可读属性。

对于共享显存shareframebuffer而言,server端(主屏端)对shareframebuffer有可读可写的属性;而所有的client端对于shareframebuffer只有可读的属性。

在上述各实施例的基础上,如图2所示,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,包括:

通过共享显存管理列表的status字段值的指示可将client端的显存调整为shareframebuffer或framebuffer;具体为:

server端上产生一个与某一个或多个client端多屏同显操作,并将共享显存管理列表中对应client端的status字段置1,并通知所有client端;

对应client端在共享显存管理列表中检测到server端要求与本client端进行多屏同显时,将本client端的显存设置为shareframebuffer。

即多屏同显操作为:

(1)server端将管理列表中对应client端的status字段置1;

(2)client端重新设置显存为shareframebuffer;

(3)主屏(server端)将图像数据存放在shareframebuffer中;

(4)client端从shareframebuffer获取图像数据在副屏中显示。

主屏端取消多屏同显:

(1)server端将管理列表中对应client端的status字段置0;

(2)client端重新设置显存为私有的framebuffer。

副屏端取消多屏同显:

(1)client端将管理列表中对应自身的status字段置0;

(2)client端重新设置显存为私有的framebuffer。

如图3所示,在本实施例中,图3作为共享显存的使用示例图,图中,osa作为server端,osb与osc均作为client端。

对于主屏a而言,当没有产生任何的多屏同显操作时,副屏b与副屏c都有自己私有的frambuffer作为显存,所有图像的显示均从私有的framebuffer中获取,这样属于多屏异显的情况。

当在主屏a上产生一个与副屏b实现多屏同显的操作时,osa会将共享内存的fb_m管理列表中,属于osb的列表区域的status字段置1,并产生中断通知所有的os,列表信息有变动;而osb会在共享内存的fb_m管理列表中检测到主屏a要求与副屏b实现多屏同显功能,此时osb将暂时放弃副屏b的私有framebuffer,将副屏b的显存设置为shareframebuffer,此时副屏b显示的图像画面将和主屏a相同。相同操作,副屏c也是如此。

当在主屏a上产生与副屏b和副屏c都实现多屏同显的操作时,osa同样会设置共享内存fb_m管理列表中对应与osb和osc的status字段为1,然后通知所有的client端,列表信息有变动。此时osb与osc会分别将副屏b与副屏c的显存设置为shareframebuffer,实现主屏a、副屏b、副屏c同时实现多屏通信。

在上述各实施例的基础上,如图2所示,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,还包括:

若server端上产生一个与某一个或多个client端取消多屏同显的操作时,server端将共享显存管理列表中对应client端的status字段置0,并通知所有client端;

对应client端收到通知后,将本client端的显存设置为framebuffer,实现多屏异显。

同样,如图3所示,当在主屏a上产生一个取消与副屏b继续实现多屏同显的操作时,osa会将共享内存的fb_m管理列表区中属于osb的列表中的status字段置0,并产生中断通知所有的client。而osb收到通知后,将会重新将副屏b的显存设置为其私有的framebuffer,重新恢复多屏异显的情况。

在上述各实施例的基础上,通过共享显存管理列表的status字段值的指示可将client端的显存调整为shareframebuffer或framebuffer,还包括:

client端将共享显存管理列表中对应自身的status字段置0,并将自身显存设置为framebuffer,以主动取消与server端的多屏同显。

如图3所示,副屏b或者副屏c也可以主动的产生取消与主屏a实现多屏同显的操作,此时osb/osc只需要在共享内存中的显存管理列表fb_m中对应自身的status字段设置为0,并将副屏b/副屏c的显存设置为私有的framebuffer即可。

综上,多屏异显操作为:

(1)server端将管理列表中对应client端的status字段置0,或者client端主动将本身对应管理列表的status字段置0;

(2)client端中重新设置副屏的显存为自身os提供的私有显存framebuffer,副屏的显示数据从私有显存中获取;

(3)server端的主屏的显示数据从共享显存shareframebuffer中获取。

在上述各实施例的基础上,如图2所示,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,还包括:

server端产生一个使client端作为server端的扩展屏时,server端在共享显存管理列表中将对应client端的status字段置1,并通知所有client端;

对应client端将自身显存设置为shareframebuffer,并将自身显示的所有数据流均输入到shareframebuffer;server端则重新申请一片私有内存作为自身的私有显存,并将server端显示的数据流均输入到本身的私有显存中。

多屏扩展操作为:

(1)server端将管理列表中对应client端的status字段置1;

(2)server端重新申请一片私有的framebuffer并设置为主屏显存;

(3)client端重新设置显存为shareframebuffer;

(4)server端将扩展屏显示的图像数据存放在shareframebuffer中;

(5)server端将主屏显示的图像数据存放在私有的framebuffer中;

(6)client从shareframebuffer获取图像数据在副屏中显示;

(7)server从私有的framebuffer获取图像数据在主屏中显示;

主屏端取消多屏扩展:

(1)server端将管理列表中对应client端的status字段置0;

(2)server端重新设置显存为shareframebuffer;

(3)server端预留/释放私有显存frambuffer;

(4)client端重新设置显存为私有的framebuffer。

副屏取消多屏扩展:

(1)client端将管理列表中对应自身的status字段置0;

(2)client端重新设置显存为私有的framebuffer;

(3)server端对私有的framebuffer与shareframebuffer进行图层叠加处理,然后显示;

如图3所示,假设在主屏a中产生一个使得副屏b作为主屏a的扩展屏时,此时osa会在共享内存的fb_m列表中修改副屏b对应的列表的status字段为1,并中断通知所有client。对于osb而言,会将副屏b的显存设置为shareframebuffer;而对于osa而言,需要重新申请一片私有内存作为主屏a的显存,在主屏a上显示的图像均输入到这片主屏a的私有显存中,而在副屏b显示的图像则输入到shareframebuffer中。

本实施例中,基于上述基于虚拟化共享显存的多屏互动方法,还提供一种基于虚拟化共享显存的多屏互动系统,包括:

server端,用于产生数据流,在hypervisor系统中构建一个共享显存shareframebuffer,并将server端的数据流存入shareframebuffer;

client端,用于与client端实现多屏互动,并在hypervisor系统中构建一个私有显存framebuffer;

创建共享显存管理列表,用于将所有client端注册到共享显存管理列表中,通过共享显存管理列表的status字段值的指示可将client端的显存调整为shareframebuffer或framebuffer,以使client端从shareframebuffer或framebuffer中获取数据流并显示,实现client端与server端的多屏互动。

图4是示出本发明实施例的基于虚拟化共享显存的多屏互动设备的结构框图。

参照图4,所述基于虚拟化共享显存的多屏互动设备,包括:处理器(processor)810、存储器(memory)830、通信接口(communicationsinterface)820和总线840;

其中,

所述处理器810、存储器830、通信接口820通过所述总线840完成相互间的通信;

所述处理器810用于调用所述存储器830中的程序指令,以执行上述各方法实施例所提供的基于虚拟化共享显存的多屏互动方法,例如包括:

在hypervisor系统中构建一个共享显存shareframebuffer,将产生数据流的进程作为server端,并将server端的数据流存入shareframebuffer;

将每一个支持与client端实现多屏互动的进程作为client端,为每个client端构建一个私有显存framebuffer;

创建共享显存管理列表,将所述client端注册到共享显存管理列表中,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,以使client端从shareframebuffer或framebuffer中获取数据流并显示,实现client端与server端的多屏互动。

本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行如上述的基于虚拟化共享显存的多屏互动方法,例如包括:

在hypervisor系统中构建一个共享显存shareframebuffer,将产生数据流的进程作为server端,并将server端的数据流存入shareframebuffer;

将每一个支持与client端实现多屏互动的进程作为client端,为每个client端构建一个私有显存framebuffer;

创建共享显存管理列表,将所有client端注册到共享显存管理列表中,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,以使client端从shareframebuffer或framebuffer中获取数据流并显示,实现client端与server端的多屏互动。

本实施例中还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如上述的基于虚拟化共享显存的多屏互动方法,例如包括:

在hypervisor系统中构建一个共享显存shareframebuffer,将产生数据流的进程作为server端,并将server端的数据流存入shareframebuffer;

将每一个支持与client端实现多屏互动的进程作为client端,为每个client端构建一个私有显存framebuffer;

创建共享显存管理列表,将所述client端注册到共享显存管理列表中,通过共享显存管理列表将client端的显存调整为shareframebuffer或framebuffer,以使client端从shareframebuffer或framebuffer中获取数据流并显示,实现client端与server端的多屏互动。

综上所述,本发明实施例提出一种基于虚拟化共享显存的多屏互动方法和系统,通过在共享内存上构建共享显存shareframebuffer),hostos与每一个guestos均可以申请访问,使得当不同os对应的显示屏需要同步显示同一个画面时,只需要将显示画面的数据流存储在shareframebuffer中,而各个os从此显存获取数据流显示在显示屏上即可。此发明将泛化系统之间的概念,抽象每一个显示屏驱动/进程为一个client端,而产生数据流的进程(可能是播发器/流媒体等)为server端;保证不同os之间能够稳定和高效的实现同步显示互动。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1