CN115695857A - 云应用的视频编码方法及装置 - Google Patents
云应用的视频编码方法及装置 Download PDFInfo
- Publication number
- CN115695857A CN115695857A CN202211706893.2A CN202211706893A CN115695857A CN 115695857 A CN115695857 A CN 115695857A CN 202211706893 A CN202211706893 A CN 202211706893A CN 115695857 A CN115695857 A CN 115695857A
- Authority
- CN
- China
- Prior art keywords
- cache
- video coding
- video
- original data
- cloud application
- 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.)
- Granted
Links
Images
Abstract
本申请公开了一种云应用的视频编码方法及装置。其中,该方法包括:为服务器的显卡的云应用渲染任务和视频编码任务创建共享缓存,服务器用于为用户终端提供云应用服务;将显卡执行云应用渲染任务得到的原始数据存入共享缓存;在执行所述视频编码任务时,从所述共享缓存中读取所述原始数据,对所述原始数据进行视频编码,得到编码视频。本申请解决了相关技术中服务器为云应用进行视频编码消耗的资源较多的技术问题。
Description
技术领域
本申请涉及计算机领域,具体而言,涉及一种云应用的视频编码方法及装置。
背景技术
云应用(比如云游戏)是以云计算为基础的应用方式,在云应用的运行模式下,所有应用在服务器端运行,并将渲染完毕后的应用画面压缩后通过网络传送给用户客户端,用户的应用设备不需要高端处理器和显卡,只需要基本的视频解压能力即可。
在云应用中,服务器端常见的架构是硬件采用ARM服务器,运行Linux操作系统,比如ubuntu、centos等,Linux上运行docker服务(是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到Linux或Windows操作系统的机器上,实现虚拟化,容器可使用沙箱机制,相互之间不会有任何接口),将安卓容器化。
ARM服务器可外挂PCI显卡(全称为Peripheral Component Interconnect,是一种用于定义局部总线的标准),安卓图形系统使用PCI显卡进行渲染,渲染后的结果通过硬件编码器编码成视频流,通过网络推送到用户端。由于整个过程较为繁琐,会消耗服务器的大量资源。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种云应用的视频编码方法及装置,以至少解决相关技术中服务器为云应用进行视频编码消耗的资源较多的技术问题。
根据本申请实施例的一个方面,提供了一种云应用的视频编码方法,包括:为服务器的显卡的云应用渲染任务和视频编码任务创建共享缓存,服务器用于为用户终端提供云应用服务;将显卡执行云应用渲染任务得到的原始数据存入共享缓存;在执行所述视频编码任务时,从所述共享缓存中读取所述原始数据,对所述原始数据进行视频编码,得到编码视频。
可选地,为服务器的显卡的云应用渲染任务和视频编码任务创建共享缓存,包括:通过调用缓存管理器,向操作系统内核申请缓存;将申请的缓存设置为允许被视频编码插件访问,以作为共享缓存,视频编码插件用于执行视频编码任务。
可选地,通过调用缓存管理器,向操作系统内核申请缓存,包括:调用缓存管理器libgbm的gbm_bo_create()接口,向操作系统内核的缓存子系统dma-buf发出缓存申请,以通过缓存子系统dma-buf为云应用渲染任务创建缓存。
可选地,将申请的缓存设置为允许被视频编码插件访问,以作为共享缓存,包括:通过调用libva库的vaCreateSurfaces()接口,将申请的缓存映射到视频编码插件的缓存区surface,以便于视频编码插件执行视频编码任务时从共享缓存读取原始数据。
可选地,在通过调用libva库的vaCreateSurfaces()接口,将申请的缓存映射到视频编码插件的缓存区surface之前,本申请的方法还包括:通过调用安卓的gralloc_handle接口,获取申请的缓存的指示信息prime_fd。通过调用libva库的vaCreateSurfaces()接口,将申请的缓存映射到视频编码插件的缓存区surface,包括:通过调用libva库的vaCreateSurfaces()接口,将指示信息prime_fd指示的缓存映射到视频编码插件的缓存区surface。
可选地,在为服务器的显卡的云应用渲染任务和视频编码任务创建共享缓存之前,本申请的方法还包括:在服务器的第一操作系统中利用容器运行第二操作系统,其中,第二操作系统为与云应用适配的操作系统。通过调用缓存管理器,向操作系统内核申请缓存,包括:通过调用缓存管理器libgbm,向操作系统内核申请缓存,操作系统内核是第一操作系统和第二操作系统的共享系统内核。
可选地,对所述原始数据进行视频编码,包括:对所述原始数据进行格式转换,并对格式转换后的原始数据进行视频编码。
可选地,所述对所述原始数据进行格式转换,并对格式转换后的原始数据进行视频编码,包括:通过视频编码插件ffmpeg中的视频编码器vaapi调用libva库的接口,对所述视频编码插件ffmpeg的缓存区surface内的原始数据进行格式转换得到AVFrame结构数据,并对所述AVFrame结构数据进行视频编码,得到所述编码视频。
可选地,所述对所述原始数据进行视频编码,包括:通过调用libva中的视频编码器,对所述原始数据进行视频编码。
根据本申请实施例的另一方面,还提供了一种云应用的视频编码装置,包括:创建单元,用于为服务器的显卡的云应用渲染任务和视频编码任务创建共享缓存,其中,服务器用于为用户终端提供云应用服务;缓存单元,用于将显卡执行云应用渲染任务得到的原始数据存入共享缓存;编码单元,用于在执行所述视频编码任务时,从所述共享缓存中读取所述原始数据,对所述原始数据进行视频编码,得到编码视频。
根据本申请实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,程序运行时执行上述的方法。
根据本申请实施例的另一方面,还提供了一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述机器可读指令,以执行上述的方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方法中任一实施例的步骤。
在本申请实施例中,为显卡的云应用渲染任务和视频编码任务创建共享缓存,在云应用运行的过程中,将显卡执行云应用渲染任务得到的原始数据存入共享缓存,之后在执行视频编码任务时,从共享缓存中读取原始数据,对原始数据进行视频编码,得到编码视频。在本申请的技术方案中,应用渲染得到的原始数据放在共享缓存中,视频编码时能直接从共享缓存中读取,而不用通过CPU进行数据转移,从而可以减少CPU等资源的消耗,可以解决相关技术中服务器为云应用进行视频编码消耗的资源较多的技术问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的云应用的视频编码方法的硬件环境的示意图;
图2是根据本申请实施例的一种云应用的视频编码方法的流程图;
图3是根据本申请实施例的一种可选的云应用的视频编码方案的示意图;
图4是根据本申请实施例的另一种可选的云应用的视频编码方案的示意图;
图5是根据本申请实施例的一种云应用的视频编码装置的示意图;以及,
图6是根据本申请实施例的一种电子设备的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在云应用中,云端ARM服务器常外挂PCI显卡,安卓图形系统使用PCI显卡进行渲染,渲染后的结果通过硬件编码器编码成视频流,通过网络推送到用户端。硬件编码器可以选择外接PCI视频加速卡,如Codensity™ T400系列视频编码器、Seirios系列视频加速卡等。
发明人对上述过程进行分析后认识到,由于这些专业的视频加速卡不能直接使用显卡渲染后的数据,所以需要通过OpenGL(全称为Open Graphics Library,即开放图形库或者开放式图形库,是用于渲染2D、3D等矢量图形的跨语言、跨平台的应用程序编程接口API)指令将显卡渲染后的数据读到内存,然后送入硬件编码器,这种方式会经过一次内存拷贝,并增加中央处理器CPU(全称为Central Processing Unit,作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元)的消耗。显卡除了渲染之外,也具有编码功能,因此本方案使用显卡代替专业的编码卡进行编码,其可以直接访问显卡渲染后的数据,实现内存零拷贝,不会额外增加CPU消耗(此处的消耗包括数据读取消耗的时间、数据转移消耗的时间、数据存放消耗的时间和多占用的存储空间、处理以上工作时对CPU自身资源的占用等),提高了数据处理效率。
为了解决以上问题,根据本申请实施例的一方面,提供了一种云应用的视频编码方法的方法实施例。
可选地,在本实施例中,上述云应用的视频编码方法可以应用于如图1所示的由用户终端101和服务器103(服务器103为云服务器)所构成的硬件环境中。如图1所示,服务器103通过网络与终端101进行连接,可用于为终端或终端上安装的客户端提供云应用服务,可在服务器上或独立于服务器设置数据库105,用于为服务器103提供数据存储服务,上述网络包括但不限于:广域网、城域网或局域网,终端101并不限定于PC、手机、平板电脑等。
本申请实施例的云应用的视频编码方法可以由服务器103来执行,图2是根据本申请实施例的一种云应用的视频编码方法的流程图,如图2所示,该方法可以包括以下步骤:
步骤S202,为服务器显卡的云应用渲染任务和视频编码任务创建共享缓存,服务器用于为用户终端提供云应用服务,显卡可以为外挂的PCI显卡或者其他显卡;此处的共享缓存可以位于服务器的内存或者显存上;云应用可以为云游戏应用、云社交应用等。
步骤S204,将显卡执行云应用渲染任务得到的原始数据存入共享缓存。
步骤S206,在执行视频编码任务时,从共享缓存中读取原始数据,对原始数据进行视频编码,得到编码视频。
相关技术中,由于AMD(专门为计算机、通信和消费电子行业设计和制造各种创新的微处理器,如中央处理器、显卡、主板芯片组、电视卡芯片等,以及提供闪存和低功率处理器解决方案的供应商)的显卡和硬件编码器是两个独立的硬件单元,各自的内存无法共享给对方使用,在云应用场景中,为将显卡合成后得到的GRBA数据送给编码器编码,需将显存中的GRBA数据通过CPU读取到内存中,转换成YUV格式的数据,再发送给编码器编码。GRBA数据的量非常大,通过CPU读取出来时,中间有一个内存拷贝的过程,非常消耗CPU资源。
在本申请的技术方案中,为显卡的云应用渲染任务和视频编码任务创建共享缓存,在云应用运行的过程中,将显卡执行云应用渲染任务得到的原始数据存入共享缓存,之后在执行视频编码任务时,从共享缓存中读取原始数据,对原始数据进行视频编码,得到编码视频。在本申请的技术方案中,应用渲染得到的原始数据放在共享缓存中,视频编码时能直接从共享缓存中读取,而不用通过CPU进行数据转移,从而可以减少CPU等资源的消耗,可以解决相关技术中服务器为云应用进行视频编码消耗的资源较多的技术问题。
前述对所述原始数据进行视频编码,可以包括:对所述原始数据进行格式转换,并对格式转换后的原始数据进行视频编码。具体地,对所述原始数据进行格式转换,并对格式转换后的原始数据进行视频编码,可以包括:通过视频编码插件ffmpeg中的视频编码器vaapi调用libva库的接口,对所述视频编码插件的缓存区surface内的原始数据进行格式转换得到AVFrame结构数据,并对所述AVFrame结构数据进行视频编码,得到所述编码视频。上述原始数据是指GPU渲染得到的数据(如GRBA数据,GRBA分别表示绿Green、红Red、蓝Blue和Alpha通道,Alpha通道为图像的透明度参数),这些数据的数据类型如果与视频编码器所需的数据类型不匹配,就需要进行格式转换。所以,此处进行格式转换的目的是为了得到与视频编码器适配的数据类型,此处转换得到的数据一般为无损数据(如YUV格式的数据,YUV是一种颜色空间,基于YUV的颜色编码是流媒体的常用编码方式,Y表示流明,U、V分别表示色度、浓度)。
例如:在云游戏中,显卡先对游戏中用户操作角色行走、用户操作角色攻击游戏场景中的怪物等进行渲染,得到texture纹理数据(即原始数据,其保存格式可以为GRBA),texture纹理数据会被保存在共享缓存中,之后编码器直接从共享缓存读取texture纹理数据,转换为YUV格式的数据(可保存在AVFrame结构体中,该结构体是存储音视频原始数据的结构体,该结构体位于libavutil/frame.h中,是ffmpeg中的数据结构),再编码为h264格式的角色行走的视频、攻击怪物的视频等,最后通过网络将编码得到的视频传输到用户终端上进行即时展示。
本申请使用dma-buf(dma-buf是内核中一个独立的子系统,提供了一个让不同设备、子系统之间进行共享缓存的统一框架,这里说的缓存通常是指通过DMA方式,即采用成组数据传送的方式,访问的和硬件交互的内存)来让显卡和硬件编码器共享存储,libva(libva是一套开源的通过显卡进行视频加速处理的库和API规范)直接通过GPU将原始数据(如GRBA数据)进行格式转换(如转换成YUV格式的视频)和编码,不再通过CPU读取RGBA等类型的原始数据,实现零内存拷贝,大大节省了CPU资源。图3所示为一种可选的云应用的视频编码方案的实施例,下文结合图3,以具体实施方式进一步详述本申请的技术方案:
步骤S1,搭建操作系统环境,在服务器上安装第一操作系统。
若服务器采用ARM架构的服务器,则操作系统可采用ARM版ubuntu(一种Linux操作系统),当然,若此处采用其他类型的处理器,也可采用适配的其他Linux操作系统。
步骤S2,在第一操作系统中利用容器运行第二操作系统,第二操作系统为与云应用适配的操作系统。
承接上例,若第一操作系统为ubuntu操作系统,可在ubuntu操作系统上使用docker容器运行与云应用适配的第二操作系统,如Android系统,此处也可以根据需要运行其它与云应用适配的系统(如IOS等)。
步骤S3,调用缓存管理器,从操作系统内核中为云应用渲染任务申请缓存,此处的操作系统内核是第一操作系统ubuntu和第二操作系统Android的共享系统内核。
在步骤S3的实施例中,可调用缓存管理器libgbm(libgbm是通用缓存管理器,是一套开源的负责管理渲染缓存的库和API规范,是Mesa的一部分)的gbm_bo_create()接口(该接口可通过libgmb提供的接口创建一块渲染缓存),向操作系统内核的缓存子系统dma-buf发出缓存申请,以通过缓存子系统dma-buf为云应用渲染任务创建缓存。例如,Android系统中负责图形渲染并合成的图形处理模块SurfaceFlinger通过libgbm向dma-buf申请缓存,然后将画面(即原始数据)渲染到该缓存中。
步骤S4,将申请的缓存设置为允许被视频编码插件访问,以作为共享缓存,其中,视频编码插件运行于第二操作系统中,用于执行视频编码任务。
承接上例,如图3所示:第二操作系统为第一操作系统中运行的容器docker的操作系统,第一操作系统为宿主机服务器的操作系统,可以为ubuntu操作系统,第二操作系统可以为Android操作系统。在Android操作系统内运行有视频编码插件(如ffmpeg)。该视频编码插件中包括多个工具,如格式转换的工具(如将GRBA数据格式转换为AVFrame结构数据的工具)、编码工具(如h264编码器、h265编码器)。Android系统中的图形处理模块SurfaceFlinger通过调用缓存管理器libgbm的接口gbm_bo_create()直接向dma-buf申请缓存,由dma-buf为云应用渲染任务创建缓存。在申请缓存之后,可以将申请的缓存设置为允许被视频编码插件访问,以作为云应用渲染任务和视频编码任务的共享缓存,具体可以通过调用Android系统的gralloc_handle接口(是安卓系统中的一个数据接口,负责存储一块图形缓存的详细信息),获取所述申请的缓存的指示信息prime_fd(SurfaceFlinger将合成后的数据放共享缓存,prime_fd可以用来表征缓存中的数据位置),可以通过调用libva库的vaCreateSurfaces()接口(libva库中的一个负责创建一组Surface的API接口),将所述指示信息prime_fd指示的缓存映射到所述视频编码插件的缓存区surface(或称VASurface,VASurface是存储视频数据的结构体,是libva模块中的数据结构)。所述视频编码插件执行所述视频编码任务时,所述视频编码插件中的编码器等工具可直接从所述共享缓存(图形处理模块SurfaceFlinger将合成后的数据放入该缓存)读取所述原始数据,对读取的数据进行格式转换,并对格式转换后的数据进行视频编码,得到编码视频,具体可以包括:调用libva库的接口,对视频编码插件的缓存区surface内的原始数据进行格式转换得到AVFrame结构数据,通过视频编码插件ffmpeg中的视频编码器vaapi对AVFrame结构数据进行视频编码,得到编码视频。
例如,通过ffmpeg,将surface结构体中的原始数据从GRBA数据转换为YUV格式的数据存储在AVFrame结构体中,然后利用vaapi对该AVFrame结构体进行编码,得到h264等格式的视频编码数据。上述ffmpeg在获取共享缓存数据时,可通过libva提供的接口进行硬加速处理。
本申请使用AMD显卡进行图形渲染,渲染后的数据通过libva直接转换成AVFrame结构数据,然后通过ffmpeg的vaapi编码器编码,实现编码数据零拷贝,减少了CPU消耗。
另外,前述对所述原始数据进行视频编码,可以包括:通过调用libva中的视频编码器,对所述原始数据进行视频编码。例如,视频编码插件在执行视频编码任务时,可以通过libva接口选择合适的编码profile(profile是对视频压缩特性的描述),并利用h264视频编码器等编码器对缓存区surface中的原始数据直接进行编码,得到h264等格式的视频编码数据,具体编码方案参见图4。需要说明的是,相较于图3示出的编码方案来说,图4示出的编码方案不需要对原始数据进行格式转换,而是直接调用libva中的视频编码器进行编码。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
根据本申请实施例的另一个方面,还提供了一种用于实施上述云应用的视频编码方法的云应用的视频编码装置。图5是根据本申请实施例的一种云应用的视频编码装置的示意图,如图5所示,该装置包括:
创建单元51,用于为服务器的显卡的云应用渲染任务和视频编码任务创建共享缓存,服务器用于为用户终端提供云应用服务;缓存单元53,用于将所述显卡执行云应用渲染任务得到的原始数据存入共享缓存;编码单元55,用于在执行视频编码任务时,从共享缓存中读取原始数据,对原始数据进行格式转换,并对格式转换后的原始数据进行视频编码,得到编码视频。
本申请实施例提供的云应用的视频编码装置,其实现过程与本申请实施例提供的云应用的视频编码方法一致,所能达到的效果也与本申请实施例提供的云应用的视频编码方法相同,在此不再赘述。
图6是根据本申请实施例的一种电子设备的结构框图,如图6所示,该电子设备可以包括:处理器61、存储器63和总线65,所述存储器63存储有所述处理器61可执行的机器可读指令,当电子设备运行时,所述处理器61与所述存储器63之间通过总线65通信,所述处理器61执行所述机器可读指令,以执行前述实施例所述的云应用的视频编码方法的步骤。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行云应用的视频编码方法的程序代码。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (10)
1.一种云应用的视频编码方法,其特征在于,包括:
为服务器的显卡的云应用渲染任务和视频编码任务创建共享缓存,其中,所述服务器用于为用户终端提供云应用服务;
将所述显卡执行云应用渲染任务得到的原始数据存入所述共享缓存;
在执行所述视频编码任务时,从所述共享缓存中读取所述原始数据,对所述原始数据进行视频编码,得到编码视频。
2.根据权利要求1所述的方法,其特征在于,所述为服务器的显卡的云应用渲染任务和视频编码任务创建共享缓存,包括:
通过调用缓存管理器,向操作系统内核申请缓存;
将申请的缓存设置为允许被视频编码插件访问,以作为所述共享缓存,其中,所述视频编码插件用于执行所述视频编码任务。
3.根据权利要求2所述的方法,其特征在于,所述通过调用缓存管理器,向操作系统内核申请缓存,包括:
调用缓存管理器libgbm的gbm_bo_create()接口,向所述操作系统内核的缓存子系统dma-buf发出缓存申请,以通过所述缓存子系统dma-buf为所述云应用渲染任务创建缓存。
4.根据权利要求2所述的方法,其特征在于,所述将申请的缓存设置为允许被视频编码插件访问,以作为所述共享缓存,包括:
通过调用libva库的vaCreateSurfaces()接口,将所述申请的缓存映射到所述视频编码插件的缓存区surface,以便于所述视频编码插件执行所述视频编码任务时从所述共享缓存读取所述原始数据。
5.根据权利要求4所述的方法,其特征在于,
在通过调用libva库的vaCreateSurfaces()接口,将所述申请的缓存映射到所述视频编码插件的缓存区surface之前,所述方法还包括:通过调用安卓的gralloc_handle接口,获取所述申请的缓存的指示信息prime_fd;
所述通过调用libva库的vaCreateSurfaces()接口,将所述申请的缓存映射到所述视频编码插件的缓存区surface,包括:通过调用libva库的vaCreateSurfaces()接口,将所述指示信息prime_fd指示的缓存映射到所述视频编码插件的缓存区surface。
6.根据权利要求2所述的方法,其特征在于,
在为服务器的显卡的云应用渲染任务和视频编码任务创建共享缓存之前,所述方法还包括:在所述服务器的第一操作系统中利用容器运行第二操作系统,其中,所述第二操作系统为与所述云应用适配的操作系统;
所述通过调用缓存管理器,向操作系统内核申请缓存,包括:通过调用缓存管理器libgbm,向所述操作系统内核申请缓存,其中,所述操作系统内核是所述第一操作系统和所述第二操作系统的共享系统内核。
7.根据权利要求1至6中任意一项所述的方法,其特征在于,所述对所述原始数据进行视频编码,包括:
对所述原始数据进行格式转换,并对格式转换后的原始数据进行视频编码。
8.根据权利要求7所述的方法,其特征在于,所述对所述原始数据进行格式转换,并对格式转换后的原始数据进行视频编码,包括:
通过视频编码插件ffmpeg中的视频编码器vaapi调用libva库的接口,对所述视频编码插件ffmpeg的缓存区surface内的原始数据进行格式转换得到AVFrame结构数据,并对所述AVFrame结构数据进行视频编码,得到所述编码视频。
9.根据权利要求1至6中任意一项所述的方法,其特征在于,所述对所述原始数据进行视频编码,包括:
通过调用libva中的视频编码器,对所述原始数据进行视频编码。
10.一种云应用的视频编码装置,其特征在于,包括:
创建单元,用于为服务器的显卡的云应用渲染任务和视频编码任务创建共享缓存,其中,所述服务器用于为用户终端提供云应用服务;
缓存单元,用于将所述显卡执行云应用渲染任务得到的原始数据存入所述共享缓存;
编码单元,用于在执行所述视频编码任务时,从所述共享缓存中读取所述原始数据,对所述原始数据进行视频编码,得到编码视频。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211706893.2A CN115695857B (zh) | 2022-12-29 | 2022-12-29 | 云应用的视频编码方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211706893.2A CN115695857B (zh) | 2022-12-29 | 2022-12-29 | 云应用的视频编码方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115695857A true CN115695857A (zh) | 2023-02-03 |
CN115695857B CN115695857B (zh) | 2023-03-21 |
Family
ID=85056714
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211706893.2A Active CN115695857B (zh) | 2022-12-29 | 2022-12-29 | 云应用的视频编码方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115695857B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116233520A (zh) * | 2023-05-06 | 2023-06-06 | 海马云(天津)信息技术有限公司 | 传递和获取视频数据的方法及装置、服务器设备和存储介质 |
CN116450149A (zh) * | 2023-06-16 | 2023-07-18 | 成都阿加犀智能科技有限公司 | 一种硬件解码方法、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110012003A (zh) * | 2019-03-22 | 2019-07-12 | 厦门网宿有限公司 | 一种云应用抓屏方法和装置 |
CN111654720A (zh) * | 2020-07-17 | 2020-09-11 | 腾讯科技(深圳)有限公司 | 视频编码方法、装置、设备及可读存储介质 |
CN114025238A (zh) * | 2022-01-10 | 2022-02-08 | 北京蔚领时代科技有限公司 | 基于Linux服务器原生安卓应用云端虚拟化方法 |
CN114125558A (zh) * | 2022-01-26 | 2022-03-01 | 麒麟软件有限公司 | 基于Linux桌面显卡的安卓视频解码硬件加速方法 |
CN114268796A (zh) * | 2021-12-22 | 2022-04-01 | 天翼云科技有限公司 | 视频流处理的方法及装置 |
US20220249948A1 (en) * | 2020-07-21 | 2022-08-11 | Tencent Technology (Shenzhen) Company Limited | Image processing method and apparatus, server, and medium |
-
2022
- 2022-12-29 CN CN202211706893.2A patent/CN115695857B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110012003A (zh) * | 2019-03-22 | 2019-07-12 | 厦门网宿有限公司 | 一种云应用抓屏方法和装置 |
CN111654720A (zh) * | 2020-07-17 | 2020-09-11 | 腾讯科技(深圳)有限公司 | 视频编码方法、装置、设备及可读存储介质 |
US20220249948A1 (en) * | 2020-07-21 | 2022-08-11 | Tencent Technology (Shenzhen) Company Limited | Image processing method and apparatus, server, and medium |
CN114268796A (zh) * | 2021-12-22 | 2022-04-01 | 天翼云科技有限公司 | 视频流处理的方法及装置 |
CN114025238A (zh) * | 2022-01-10 | 2022-02-08 | 北京蔚领时代科技有限公司 | 基于Linux服务器原生安卓应用云端虚拟化方法 |
CN114125558A (zh) * | 2022-01-26 | 2022-03-01 | 麒麟软件有限公司 | 基于Linux桌面显卡的安卓视频解码硬件加速方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116233520A (zh) * | 2023-05-06 | 2023-06-06 | 海马云(天津)信息技术有限公司 | 传递和获取视频数据的方法及装置、服务器设备和存储介质 |
CN116450149A (zh) * | 2023-06-16 | 2023-07-18 | 成都阿加犀智能科技有限公司 | 一种硬件解码方法、设备及存储介质 |
CN116450149B (zh) * | 2023-06-16 | 2023-08-11 | 成都阿加犀智能科技有限公司 | 一种硬件解码方法、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115695857B (zh) | 2023-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115695857B (zh) | 云应用的视频编码方法及装置 | |
US20110141133A1 (en) | Real-Time Compression With GPU/CPU | |
CN108881916A (zh) | 远程桌面的视频优化处理方法及装置 | |
US9311169B2 (en) | Server based graphics processing techniques | |
CN114025238B (zh) | 基于Linux服务器原生安卓应用云端虚拟化方法 | |
CN104660687A (zh) | 虚拟桌面显示的实现方法和系统 | |
CN107729095B (zh) | 图像处理方法、虚拟化平台及计算机可读存储介质 | |
US9542715B2 (en) | Memory space mapping techniques for server based graphics processing | |
US9235452B2 (en) | Graphics remoting using augmentation data | |
CN110636305B (zh) | 图像渲染和编码方法及相关装置 | |
CN112316433B (zh) | 游戏画面渲染方法、装置、服务器和存储介质 | |
US9805439B2 (en) | Memory space mapping techniques for server based graphics processing | |
US20130142427A1 (en) | Classification and encoder selection based on content | |
WO2023011033A1 (zh) | 图像处理方法、装置、计算机设备及存储介质 | |
CN106797398B (zh) | 用于向客户端提供虚拟桌面服务的方法和系统 | |
CN108762934B (zh) | 远程图形传输系统、方法及云服务器 | |
CN113034629B (zh) | 图像处理方法、装置、计算机设备及存储介质 | |
WO2022257750A1 (zh) | 图像处理方法、装置、电子设备、程序及可读存储介质 | |
US9613390B2 (en) | Host context techniques for server based graphics processing | |
CN114579255A (zh) | 虚拟机的图像处理方法、装置、系统以及电子设备 | |
CN114675914B (zh) | 虚拟桌面的图像传输方法、装置、电子设备及存储介质 | |
CN110545446B (zh) | 一种桌面图像编码、解码方法、相关装置及存储介质 | |
CN114756334B (zh) | 服务器与基于服务器的图形渲染方法 | |
CN117065357A (zh) | 媒体数据处理方法、装置、计算机设备和存储介质 | |
CN115801747B (zh) | 一种基于arm架构的云服务器及音视频数据传输方法 |
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 | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 230031 Room 672, 6/F, Building A3A4, Zhong'an Chuanggu Science Park, No. 900, Wangjiang West Road, High-tech Zone, Hefei, Anhui Patentee after: Anhui Haima Cloud Technology Co.,Ltd. Address before: 100015 rooms 304 and 305, 3 / F, 201 / F, yard 10, Jiuxianqiao North Road, Chaoyang District, Beijing Patentee before: BEIJING HAIYUDONGXIANG TECHNOLOGY Co.,Ltd. |