云应用处理方法和系统与流程

文档序号:30946229发布日期:2022-07-30 05:21阅读:99来源:国知局
云应用处理方法和系统与流程

1.本公开涉及云计算领域,尤其涉及一种云应用处理方法和系统。


背景技术:

2.云应用通过虚拟化的方式在服务器上运行应用,通过网络传输,将应用画面编码的数据流传递给本地进行解码渲染。这种云应用方案通用性良好,但在webview、音视频、图片等多媒体场景中,应用画面编码计算量大,带宽占用过高。
3.为了解决云应用的多媒体内容呈现问题,业已提出了基于图形引擎的分布式渲染、基于media player的重定向、以及基于云上应用访问的url链接跳转等解决方案,但上述方案有着实现难度大或是适用范围有限等诸多问题。
4.为此,需要一种更为通用且易于实现的云应用多媒体内容呈现方案。


技术实现要素:

5.本公开要解决的一个技术问题是提供一种云应用处理方案,通过由端侧获取显示多媒体组件所需的布局信息和资源信息,将资源信息透传给操作系统并基于外部纹理技术直接呈现操作系统的原生视图,能够以极低的计算和延时代价实现云应用中多媒体信息的本地渲染和呈现,同时解决云端直接发送渲染画面所引起的高带宽占用问题。
6.根据本公开的第一个方面,提供了一种云应用处理方法,包括:从云端获取应用画面信息以及第一组件的布局信息和资源信息;获取操作系统基于所述资源信息得到的资源数据;基于所述布局信息对用于呈现所述资源数据的所述第一组件进行渲染;以及将所述应用画面信息以及包括经渲染资源的所述第一组件进行合成显示。
7.可选地,获取操作系统基于所述资源信息得到的资源数据包括:使得操作系统将基于所述资源信息获取的纹理数据放入共享内存;以及从所述共享内存中获取所述纹理数据。
8.可选地,所述方法还包括:基于所述布局信息对用于呈现所述资源数据的所述第一组件进行渲染包括:在容纳所述第一组件的第一视图中呈现所述操作系统基于所述资源信息创建的视图,所述视图用于显示所述资源数据。
9.可选地,所述方法还包括:获取所述第一组件所述布局信息或状态信息的更新;以及基于更新的所述布局信息或状态信息,对所述第一组件进行渲染。
10.可选地,所述方法还包括:基于获取到与所述第一组件有重叠且位于第一组件之上的上层显示的布局信息,对所述第一组件的重叠部分进行透明化处理。
11.可选地,所述应用引擎是与操作系统隔离的应用引擎,并且获取的所述资源数据是视频流或图像数据。可选地,所述资源数据是经由视频解码器渲染的视频流。
12.根据本公开的第二个方面,提供了一种云应用处理系统,包括云端和客户端,其中所述云端用于:运行云应用并获取应用画面;判定所述应用画面中包括由所述客户端获取并呈现的第一组件;以及将所述应用画面、以及所述第一组件的布局信息和资源信息发送
给给所述客户端,并且所述客户端用于执行如第一方面所述的方法。
13.根据本公开的第三个方面,提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行如上述第一方面所述的方法。
14.根据本公开的第四个方面,提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行如上述第一方面所述的方法。
15.由此,本发明通过涉及一套云原生架构的实现,通过端云协同,引入本地的算力,可以将更多的资源如图片、音视频、webview等元素作为外接纹理接入到应用中,使用本地算力进行解码、渲染和合成。由此可以避免传输大量的渲染指令,在降低云应用的带宽同时,更好地提升用户体验。
附图说明
16.通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
17.图1示出了客户端上呈现的云应用视图的一个例子。
18.图2示出了云应用系统的组成示意图。
19.图3示出了根据本发明一个实施例的云应用处理方法。
20.图4a-c示出了利用本发明的云应用处理方法进行应用画面显示的一个例子。
21.图5示出了一个简单的flutter渲染框架示意图。
22.图6示出了本发明云应用处理方法的一个具体实现。
23.图7示出了端侧经由外部纹理进行数据传输的方式。
24.图8示出了根据本发明一实施例可用于实现上述云应用处理方法的计算设备的结构示意图。
具体实施方式
25.下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
[0026]“云应用”顾名思义,是一种在端侧用户的控制下,主要在云侧实现的应用,是一种主要通过互联网访问的软件,一种端云配合的应用交互方式。这意味着应用功能中至少有一部分是由服务器(而不是由用户的本地客户端)运行并实现的。
[0027]
图1示出了端侧呈现的云应用视图的一个例子。在一个实现中,用户可以通过在已有的客户端设备(例如,智能电话、平板电脑、台式机等的物理设备)上安装云应用客户端(对应于在物理设备上安装的软件应用程序),并点击云应用客户端的图标等形式来进入如图1所示的云应用界面。在另一个实现中,也可以在专用的瘦客户机中内嵌云应用客户端,并通过启动客户端等操作来进入如图1所示的云应用界面。在下文中,用“客户端设备”来指
代端侧的物理设备,用“客户端”来指代在端侧的物理设备上安装的云应用客户端,即,云应用的端侧软件应用程序。
[0028]
如图所示,界面1中可以包括多个应用,如图1中示出的应用1~应用8。每个应用都以相同格式的显示组件10的形式呈现,并且在每个显示组件10内,可以包括应用名称(例如,对应于图中的应用1~8)、应用logo(图标)、以及点击用于打开应用的按钮101。另外,界面1还可以包括退出按钮20,用于从云应用界面中退出。
[0029]
由于主要的计算工作可以在云端实现,云应用基于应用引擎的跨平台特性,可以集合android、linux、windows等多种环境下的应用,并通过云端的容器技术实现快速启动和使用。例如,云端和客户端上都可以安装诸如flutter的跨平台应用引擎,以实现在图1所示的一个应用平台中同时包括多个操作系统中的应用。通过云应用功能,用户可以同时打开android的游戏应用(例如,对应于图中的应用1),或者windows下的图形处理应用(例如,对应于图中的应用2),或者ios下的视频编辑应用(例如,对应于图中的应用3),以及android的短视频用于(例如,对应于图中的应用4)等。每个应用背后都完整封装了不同运行环境的配置和运行环境,不同平台之间的应用数据互相独立。通过云计算灵活扩容的特点,用户可以最大化利用云上资源,
[0030]
应该理解的是,图1仅示出了云应用平台的一个例子,在其他的实施例中,各个应用能够以不同的方式显示、进入或退出,并且在应用界面中也可以包括更多或是更少的应用。
[0031]
在针对云应用的整体实现中,需要包括云端和客户端两方。图2示出了云应用系统的组成示意图。如图所示,云端(服务器)100经由网络与客户端200连接。客户端200可以具有各类形态,例如200_1所示的智能电话或是平板、200_2所示的笔记本计算机、200_3所示的台式计算机、以及200_4所示的处理单元仅包括瘦客户机的实现。
[0032]
在一种云应用的实现中,云侧100(服务器端)负责应用的逻辑处理、渲染、合成以及画面传输,端侧200(客户端)负责应用的解码、渲染以及用户的输入处理。云应用通过虚拟化的方式在服务器上运行应用,通过网络传输,将应用画面编码的数据流传递给本地进行解码渲染。这种云应用方案通用性良好,但在webview、音视频、图片等多媒体场景中,例如,在需要打开短视频应用4时,如果在云端解码并直接将播放图像传送到客户端,则会导致应用画面编码计算量大,带宽占用过高。
[0033]
为了解决云应用的多媒体内容呈现问题,业已提出了如下多种解决方案:
[0034]
·
基于图形引擎的分布式渲染方式,实现难度大且复杂,对传输协议、同步等有较高要求;
[0035]
·
基于特定windows的media player的重定向,是基于系统api的层面实现的方案,仅适用windows且只能解决视频文件的播放重定向,无法解决应用内的场景;以及
[0036]
·
基于云上应用访问的url链接跳转,是基于过滤规则的web重定向,仅适用于web场景。
[0037]
由上可知,现有方案仍然有着实现难度大或是适用范围有限等诸多问题。因此,需要一种更为通用且易于实现的云应用多媒体内容呈现方案。
[0038]
为此,本发明提出一种云应用处理方案,该方案通过由端侧获取显示多媒体组件所需的布局信息和资源信息,将资源信息透传给操作系统并基于外部纹理技术直接呈现操
作系统的原生视图,能够以极低的计算和延时代价实现云应用中多媒体信息的本地渲染和呈现,同时解决云端直接发送渲染画面所引起的高带宽占用问题。
[0039]
图3示出了根据本发明一个实施例的云应用处理方法。该方法可由客户端执行,尤其可由客户端设备上的安装的云应用客户端(例如,云应用app)执行。例如,该方法可由示出图1所示界面的云应用在用户设备(例如,图2所示的任一客户端设备200)上安装的客户端执行,具体地,可由客户端所包括的应用引擎执行,用于以更高的效率和更小的代价实现例如短视频应用4等的高带宽占用型应用的渲染和显示。
[0040]
在步骤s310,从云端获取应用画面信息以及第一组件的布局信息和资源信息,并在步骤s320获取操作系统基于资源信息得到的资源数据。
[0041]
在此,应该明确的是,只有在一个ui组件中呈现的内容,需要由客户端设备上安装的操作系统(即,该设备“原生的”操作系统)获取时,才会执行本发明如图3所示的云应用处理方法。为此,“第一组件”指代需要由端侧底层操作系统获取其中显示的资源数据的ui组件。在其他情况下,则可以利用更为简单高效的方式来进行应用画面的呈现。例如,在用户打开云应用平台时,云端可以直接生成如图1所示的应用画面,并将传送给客户端以供显示。具体地,云端可以通过用户点击打开的应用类型来判定是否需要利用本发明的云应用处理方法,并在判定为是时,进行第一组件的布局信息和资源信息的下发,而非云端的直接渲染。
[0042]
图4a-c示出了利用本发明的云应用处理方法进行应用画面显示的一个例子。如图4a所示,当用户点击例如短视频应用4时,会产生应用界面30。而在用户点击应用界面30中的视频播放按钮时,需要在应用界面30内为用户提供视频流播放。此时由于直接在云端进行视频流获取、解码和传输以供客户端直接显示,会大量占用带宽,因此必须执行本发明所述的云应用处理方案。
[0043]
为此,在不同的实现中,云端可以在接收到用户打开应用4的请求或是点击视频观看请求时,选择将应用画面信息以及第一组件的布局信息和资源信息发送给客户端。换句话说,在一个例子中,由于在打开应用4时视频流尚未播放,因此仍然可由云端进行完整应用图像的生成和下发,并在真正开始播放视频流时再进行第一组件布局信息和资源信息的下发。而在另一个例子中,云端也可以响应于接收到短视频应用4的打开指令,直接下发第一组件(哪怕此时并非开始视频流播放)。
[0044]
在图4a和图4b的例子中,位于后侧的云应用界面1可以对应于应用画面信息,第一组件则对应于应用界面30。布局信息则用于规定第一组件在界面1中的呈现位置和相对比例等,即,用于规定第一组件30在界面1中如何布局。资源信息则可以指代要在第一组件30中呈现的内容。在应用4是短视频播放应用的例子中,要呈现的内容是在线内容,则资源信息可以是指示在线内容的信息,例如url信息。在应用4例如是直播应用时,组件界面30中要呈现的内容则是例如本地摄像头的内容。此时,云端则可以指示客户端需要获取本地摄像头的资源。
[0045]
在本发明中,并非是客户端设备上安装的云应用客户端来获取资源内容,而是由下层的操作系统获取的,云应用客户端所包含的应用引擎则可以在获取到资源数据之后负载在端侧渲染第一组件。为此,在步骤s330,基于布局信息对用于呈现资源数据的第一组件进行渲染。渲染是软件使用模型来生成图像的过程。在此,获取的资源数据可以是外部纹理
(如下将详述),并由应用引擎渲染成图像。随后,在步骤s340,将在前获取的应用画面信息以及包括经渲染资源的第一组件进行合成显示。
[0046]
在一个实施例中,可由原生操作系统的视频播放器(例如,原生windows系统自带的视频播放)获取到图4a所示待播放短视频的地址并获取视频流内容进行解码显示,应用引擎在从操作系统拿到视频流内容(资源数据)之后可以进行渲染,生成图4b所示界面30中所包含的视频流图像(例如,图示的运动视频图像),并与应用界面1的画面进行合成,由此得到图4b所示界面。
[0047]
由此,本发明的云应用处理方法通过在端侧进行特定资源的处理和渲染来大幅降低全部图像内容由云端传输所造成的带宽占用问题,并且通过经由原生操作系统的资源内容直接获取来提升对特定资源的高效呈现。
[0048]
具体地,本发明将现有的应用引擎进行了基于云原生策略的改写。云原生应用是指面向系统api编程的,针对云应用架构实现的一种应用开发方式,能够优化云桌面、云应用场景的用户体验。具体地,云原生应用面向云应用进行了架构升级,针对云上部署应用的特性做了定制化,由此提供更好的用户体验。
[0049]
本发明通过设计一种云原生应用的架构,可以将云应用的一部分ui组件通过网络将其布局信息传递到端侧,在端侧进行渲染。对于这部分ui组件,由于只传递布局信息和资源信息,可以大大降低网络带宽。
[0050]
在一个具体实施例中,由于应用引擎是与原生操作系统隔离的应用引擎,并且获取的所述资源数据是高内存占用的视频流或图像数据,因此可以通过将云侧的外部纹理传入到端侧本地组件并进行合成,来实现本发明的应用画面合成方法。为此,获取操作系统基于所述资源信息得到的资源数据的步骤320可以包括:使得操作系统将基于所述资源信息获取的纹理数据放入共享内存;以及从所述共享内存中获取所述纹理数据。在此,纹理从宏观角度来看可以理解为一张图片,从微观角度来说,纹理是一种供着色器读写的结构化存储形式,类似于多维数组。具体地,端侧的应用引擎在获取到资源信息之后,可将其透传给原生操作系统,操作系统可以基于资源信息获取纹理数据,例如,基于url获取流数据,由视频解码器解码,并将视频解码器渲染的内容放入共享内存(即,“外部纹理”的传入),应用引擎就可以通过获取共享内存中的数据直接得到渲染的第一组件,随后通过与云端发出的应用画面的合成,就能得到如图4b所示的呈现给用户的显示图像。
[0051]
在具体实现上,云端可以创建第一视图(例如如下所述的platformview),上述视图可以用于在其中呈现操作系统基于资源信息创建的视图。由设备“原生”的操作系统创建的所述视图,相比于云应用客户端创建的视图,可被称为原生视图,也可直接称为“nativeview”。上述操作避免了图像类资源信息在常规操作中从gpu到cpu再到gpu的传递,由此能够实现第一组件中纹理数据的高效呈现。为此,步骤s330可以包括:在容纳所述第一组件的第一视图中呈现所述操作系统基于所述资源信息创建的视图,所述视图用于显示所述资源数据。
[0052]
在第一组件的布局信息或状态信息有更新时,则可以对第一组件进行重新渲染,并进行后续的合成显示。为此,本发明的云应用处理方法还包括:获取所述第一组件所述布局信息或状态信息的更新;以及基于更新的所述布局信息或状态信息,对所述第一组件进行渲染。
[0053]
图4c示出了布局信息改变后更新渲染第一组件的一个例子。如图4b所示,当用户点击了界面30右上角的“全屏”按钮时,则需要对界面30进行全屏显示。全屏显示对应于第一组件的布局信息发生变化,为此应用引擎根据新的布局信息重新绘制第一组件,并使其覆盖完整屏幕(应该理解的是,由于图4b所示视频图像为竖屏图像,因此在图4c的全屏视图中两侧无显示,即显示为黑色)。
[0054]
另外,在有重叠显示时,例如,在图4b所示状态下,用户又点击打开了别的应用并位于正播放视频的应用4的界面30之上时,则可以直接将界面30被遮盖部分进行透明化处理。为此,本发明的云应用处理方法还可以包括:基于获取到与所述第一组件有重叠且位于第一组件之上的上层显示的布局信息,对所述第一组件的重叠部分进行透明化处理。
[0055]
相对于完全运行端侧的本地应用相比,云应用天然具有弹性可扩容的优势,云上资源可以随着应用的资源消耗动态扩容,满足用户的需求。本方案相对于完全的云应用方案,由于引入了本地的算力,可以将更多的资源如图片、音视频、webview等元素作为外接纹理接入到应用中,使用本地算力进行解码、渲染和合成。由此可以避免传输大量的渲染指令,在降低云应用的带宽同时,更好地提升用户体验。
[0056]
本发明的如上云应用处理方案,可以通过更高层级的描述抽象,即在框架层的端云协同来优化地实现。为了方便理解,本发明如下将结合flutter框架进行描述,但应该理解的是,本发明的端云协同的框架优化方案同样适用于其他的跨平台框架以及将来新开发的框架。
[0057]
flutter是一个跨平台的ui工具集,能够允许在各种操作系统上复用同样的代码,例如ios和android,同时让应用程序可以直接与底层平台服务进行交互。如此设计是为了让开发者能够在不同的平台上,都能交付拥有原生体验的高性能应用,尽可能地共享复用代码的同时,包容不同平台的差异。
[0058]
在开发中,flutter应用会在一个vm(程序虚拟机)中运行,从而可以在保留状态且无需重新编译的情况下,热重载相关的更新。对于发行版(release),flutter应用程序会直接编译为机器代码(例如arm指令集),或者针对web平台的javascript。flutter被设计为一个可扩展的分层系统。它可以被看作是各个独立的组件的系列合集,上层组件各自依赖下层组件。组件无法越权访问更底层的内容,并且框架层中的各个部分都是可选且可替代的。从上到下包括框架层(flamework)、引擎(engine)和平台嵌入层(embedder)。
[0059]
对于底层的操作系统而言,flutter应用程序的包装方式与其他原生应用相同。在每一个平台上,会包含一个特定的嵌入层,从而提供一个程序入口,程序由此可以与底层操作系统进行协调,访问诸如surface渲染、辅助功能和输入等服务,并且管理事件循环队列。该嵌入层采用了适合当前平台的语言编写,例如android使用的是java和c++,ios和macos使用的是objective-c和objective-c++,windows和linux使用的是c++。flutter代码可以通过嵌入层,以模块方式集成到现有的应用中,也可以作为应用的主体。flutter本身包含了各个常见平台的嵌入层,同时也存在一些其他的嵌入层。
[0060]
flutter的核心是flutter引擎,它主要使用c++编写,并提供了flutter应用所需的原语。当需要绘制新一帧的内容时,引擎将负责对需要合成的场景进行栅格化。它提供了flutter核心api的底层实现,包括图形(通过skia)、文本布局、文件及网络io、辅助功能支持、插件架构和dart运行环境及编译环境的工具链。
[0061]
引擎将底层c++代码包装成dart代码,通过dart:ui暴露给上层的flutter框架层。该库暴露了底层的原语,包括用于驱动输入、图形、和文本渲染的子系统的类。
[0062]
框架层中包括widgets(小部件)层,是一种组合的抽象。每一个渲染层中的渲染对象,都在widgets层中有一个对应的类。此外,widgets层让用户可以自由组合其需要复用的各种类。响应式编程模型就在该层级中被引入。widgets构建了flutter用户界面的基石。
[0063]
flutter与其他响应式框架类似,采用了显式剥离基础状态和用户界面的方式,来解决由于创建和更新ui元素的操作被分离而易于导致的不同步问题。用户可以通过react风格的api,创建ui的描述,让框架负责通过配置创建和更新用户界面。
[0064]
在flutter里,widgets(类似于react中的组件)是用来配置对象树的不可变类。这些widgets会管理单独的布局对象树,接着参与管理合成的布局对象树。flutter的核心就是一套高效的遍历树的变动的机制,它会将对象树转换为更底层的对象树,并在树与树之间传递更改。
[0065]
build()是将状态转化为ui的方法,widget通过重写该方法来声明ui的构造:
[0066]
ui=f(state)
[0067]
build()方法在框架需要时都可以被调用(每个渲染帧可能会调用一次),它能够快速执行且不带来额外影响。
[0068]
flutter在进行渲染时,使用特别的渲染框架来实现与原生操作系统的隔离。图5示出了一个简单的flutter渲染框架示意图。
[0069]
如图所示,dart代码,通过dart:ui由虚拟机提供预编译运行时的输出。layertree(层树)便是dartruntime(运行时)输出的一个树状数据结构,树上的每一个叶子节点,代表了一个界面元素(button,image等等)。
[0070]
skia是一个跨平台渲染框架,从目前主流手机操作系统来看,skia底层调用opengl绘制。shell则特指平台特性(platform)的那一部分,包含针对具体操作系统平台相关的实现,包括eaglcontext管理、上屏的操作以及外接纹理实现等等。
[0071]
从图中可以看出,当runtime完成布局输出一个layertree以后,在流水线中会遍历layertree的每一个叶子节点,每一个叶子节点最终会调用skia引擎完成界面元素制,在遍历完成后,可以调用相应的缓存来完成上屏操作,例如不同操作系统中的glpresentrenderbuffer或glswapbuffer。
[0072]
基于这个基本原理,flutter在原生操作系统和flutter引擎上实现了ui的隔离,书写ui代码时不用再关心平台实现从而实现了跨平台。
[0073]
flutter在与原生操作系统隔离的同时,也使得flutter想要获取一些操作系统侧的高内存占用图像(摄像头帧、视频帧、相册图片等等)会变得困难重重。传统框架等可以通过桥接原生api可以直接获取这些数据,但是flutter从基本原理上就决定了无法直接获取到这些数据,而flutter定义的消息传送机制用于图像等数据的传输必然引起内存和cpu的巨大消耗。
[0074]
为此可以引入外部纹理(在此,纹理(texture)可以理解为gpu内代表图像数据的一个对象)机制来实现应用引擎对操作系统侧的高内存占用图像的高效获取。
[0075]
如图5所示,layertree的每一个叶子节点代表了dart代码排版的一个控件,如灰标的texturelayer(纹理层)节点。该节点对应的是flutter里的texture控件(不是gpu中的
texture)。当在flutter里创建出一个texture控件时,代表的是在这个控件上显示的数据,需要原生提供。本发明利用该外部纹理原理,来实现对原生操作系统侧的高内存占用图像的高效获取。
[0076]
图6示出了本发明云应用处理方法的一个具体实现。如图所示,云端(例如,图2所示的云端100)运行云应用,并获取应用画面。云端可以将需要本地获取并渲染的内容作为外部纹理,通过网络传递给端侧(例如,图2所示的客户端200)。侧接收到应用画面信息经过解码后在本地渲染,布局信息和资源信息通过端侧的应用引擎在端侧渲染ui组件,并将最终合成的应用画面(例如,图4b或4c)提供给用户。
[0077]
如下将同样以flutter架构为例描述本发明云应用处理方案的优选流程。
[0078]
首先,用户在端侧尝试开启应用,例如如图4a所示通过点击应用4的打开应用按钮。云侧在接收到上述操作后开始启动云应用。
[0079]
云侧加载应用所需的资源,包括图片、应用程序代码app.so等,并且开始流化传输应用画面(即,图6中的应用流)。
[0080]
进一步地,云侧可以创建用于本地渲染的第一视图。在flutter架构中,可以创建platformview(平台视图)来对接扩展的widget,用于本地负责渲染。在此,platformview可以理解为androidview和uikitview这两个widget的总称,允许将原生视图(例如,不同操作系统的原生视图)嵌入到了flutter的widget体系中,完成dart代码对原生视图的控制。
[0081]
具体地,云侧可以在用户打开例如短视频应用4或是点击视频时创建platformview,并进行视图与资源的关联。如果对应的是本地资源,则关联platformview和本地资源(例如,在需要打开摄像头时关联platformview和本地摄像头);如果是网络资源,如在线的图片、视频等,则关联platformview和url。
[0082]
随后,云侧可以将如上的对应关系、布局信息(即,图6所示的widget布局信息)更新到端侧。
[0083]
端侧的应用引擎在接收到资源信息(例如,本地资源或资源url)和布局信息等之后,便开始本地渲染,同时与云应用的画面进行合成。
[0084]
具体在端侧,当原生操作系统调用registerexternaltexture前,需要创建一个实现了fluttertexture协议的对象,而这个对象最终赋值给外部纹理(external_texture_)。外部纹理是flutter和操作系统之间的一座桥梁,在渲染时可以通过外部纹理源源不断的获取到当前所要展示的图像数据。
[0085]
图7示出了端侧经由外部纹理进行数据传输的方式。如图所示,通过外接纹理的方式,flutter和原生操作系统使用pixelbuffer(像素缓冲)进行数据传输。native端的数据源(摄像头、播放器等)经由其pixelbuffer输出将数据写入pixelbuffer,flutter则通过texturelayer获取pixelbuffer中的数据后将其转成opengles纹理,再交由skia绘制。至此,flutter就可以容易的绘制出原生操作系统想要绘制的数据,除了摄像头播放器等动态图像数据,诸如图片的展示也提供了image控件之外的另一种可能。
[0086]
在一个优选实施例中,应用引擎中负责加载资源(图片到纹理)和负责渲染方式的两个线程可以各自使用自己的eaglcontext,彼此通过sharegroup(android为sharecontext)来共享纹理数据。对于native侧使用opengl的模块,也会在自己的线程下面创建出自己线程对应的context(上下文),为了能够让这个context下创建出来的纹理数据
能够输送给flutter端,并交由skia完成绘制,可以在flutter创建内部的两个context时,将其的sharegroup透出,并在操作系统侧保存该sharegroup,当操作系统创建自己的context时,使其使用这个sharegroup进行创建。由此实现native和flutter之间的纹理共享。
[0087]
在云应用的布局信息、状态信息有更新时(可以从调用过setstate()来进行判断,上述更新可以是基于用户操作的更新,例如图4b所示的点击最大化按钮,也可以是来自云端的更新),则可以在build()中获取widget的布局信息,同时传递到端侧。端侧可以根据更新的布局信息进行渲染。当资源信息是视频流时,端侧可以通过原生操作系统的视频解码器在本地渲染。另外,在有遮挡时,由于服务侧云应用引擎已经有完整的元素布局信息,因此可以通过简单地将platformview做透明处理来实现相应的显示效果。
[0088]
本发明还可以实现为一种云应用处理系统,包括云端和客户端,其中所述云端用于:运行云应用并获取应用画面;判定所述应用画面中包括由所述客户端获取并呈现的第一组件;以及将所述应用画面、以及所述第一组件的布局信息和资源信息发送给给所述客户端,并且所述客户端用于执行如上所述的云应用处理方法。上述系统可以具有例如图2所示的结构。在客户端需要自行获取线上资源时,客户端还需要具有连接外部互联网的能力。
[0089]
图8示出了根据本发明一实施例可用于实现上述云应用处理方法的计算设备的结构示意图。
[0090]
参见图8,计算设备800包括存储器810和处理器820。
[0091]
处理器820可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器820可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(gpu)、数字信号处理器(dsp)等等。在一些实施例中,处理器820可以使用定制的电路实现,例如特定用途集成电路(asic,application specific integrated circuit)或者现场可编程逻辑门阵列(fpga,field programmable gate arrays)。
[0092]
存储器810可以包括各种类型的存储单元,例如系统内存、只读存储器(rom),和永久存储装置。其中,rom可以存储处理器820或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器810可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(dram,sram,sdram,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器810可以包括可读和/或写的可移除的存储设备,例如激光唱片(cd)、只读数字多功能光盘(例如dvd-rom,双层dvd-rom)、只读蓝光光盘、超密度光盘、闪存卡(例如sd卡、min sd卡、micro-sd卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
[0093]
存储器810上存储有可执行代码,当可执行代码被处理器820处理时,可以使处理器820执行上文述及的云应用处理方法。
[0094]
上文中已经参考附图详细描述了根据本发明的云应用处理方法。本发明通过涉及
一套云原生架构的实现,通过端云协同,引入本地的算力,可以将更多的资源如图片、音视频、webview等元素作为外接纹理接入到应用中,使用本地算力进行解码、渲染和合成。由此可以避免传输大量的渲染指令,在降低云应用的带宽同时,更好地提升用户体验。
[0095]
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
[0096]
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
[0097]
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
[0098]
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0099]
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1