一种全景视频转码方法、装置和设备与流程

文档序号:14953395发布日期:2018-07-17 23:03阅读:229来源:国知局

本发明涉及计算机应用技术领域,特别涉及一种全景视频转码方法、装置和设备。



背景技术:

随着用户对vr(virtualreality,虚拟现实)全景视频的清晰度和流畅性的要求越来越高,如何在保证全景视频分辨率的同时降低码率成为了在vr技术领域中亟待解决的一个问题。

用户在观看全景视频的时候,在用户的视角往往只能够看到球型全景视频中的一小部分的内容。由于通常的全景视频在转码时,所有视角都保持了相同的分辨率和清晰度,这就导致了即便是用户无法看到的视角也保持了高分辨率,这就造成了转码时码率的浪费。针对这种情况,现有技术中提出了一种将全景视频映射到多路不同的视角上,使得每一路映射的视频在特定视角上具有高清晰度,在越远离这个视角的部分渐渐降低清晰度。这样,每一路映射的视频的分辨率相比较原始的全景视频得到大大降低,从而使得转码的码率也得到降低。

现有技术中的上述方法可以如图1中所示,首先对原始全景视频进行解码;然后将解码后的全景视频分别映射到n个视角上,得到n路全景视频,n为正整数;在将n路全景视频分别进行编码,再将编码后得到的视频流进行切片和打包后进行输出。然而,上述处理过程中对多路全景视频分别进行映射和编码,需要消耗巨大的计算资源,对目前部署在cpu上的转码系统带来了巨大压力,很难做到实时的处理。因此仅能够用于vr视频点播,无法满足vr视频直播的需求。



技术实现要素:

有鉴于此,本发明提供了一种全景视频转码方法、装置和设备,从而能够满足vr视频直播的需求。

具体技术方案如下:

本发明提供了一种全景视频转码方法,该方法包括:

对全景视频进行解码处理;

将解码得到的视频数据映射至n个视角,得到n路视频数据,所述n为预设的正整数;

分别对n路视频数据进行编码,得到n路视频流;

对n路视频流分别进行切片和打包处理;

其中所述解码、映射和编码中的部分或全部处理由图形处理器gpu执行。

本发明还提供了一种全景视频转码装置,该装置包括:

解码模块,用于对全景视频进行解码处理;

映射模块,用于将解码得到的视频数据映射至n个视角,得到n路视频数据,所述n为预设的正整数;

编码模块,用于分别对n路视频数据进行编码,得到n路视频流;

切片打包模块,用于对n路视频流分别进行切片和打包处理;

其中所述解码模块、映射模块、编码模块中的部分或全部由gpu实现。

本发明还提供了一种设备,包括:

图形处理器gpu和中央处理器cpu;

存储器;

一个或者多个程序,所述一个或者多个程序存储在所述存储器中,被所述gpu或cpu执行以实现如下操作:

对全景视频进行解码处理;

将解码得到的视频数据映射至n个视角,得到n路视频数据,所述n为预设的正整数;

分别对n路视频数据进行编码,得到n路视频流;

对n路视频流分别进行切片和打包处理;

其中,所述解码、映射编码中的部分或全部处理由gpu执行。

由以上技术方案可以看出,本发明将全景视频转码中,解码、映射和编码中的部分或全部处理由gpu执行,这种利用gpu资源对全景视频转码进行加速的方式,相比较现有技术中采用纯cpu架构对全景视频进行转码的方式,提高了实时性,从而满足vr视频直播的需求。

【附图说明】

图1为现有技术中全景视频转码的过程示意图;

图2为本发明实施例提供的第一种视频转码的示意图;

图3为本发明实施例提供的第二种视频转码的示意图;

图4为本发明实施例提供的第三种视频转码的示意图;

图5为本发明实施例提供的装置结构图;

图6为本发明实施例提供的设备结构图。

【具体实施方式】

为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。

在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。

应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。

本发明的核心思想在于,将现有技术中基于纯cpu的架构实现转变成基于cpu和gpu联合的架构实现。

全景视频的转码指的是将视频码流转换成另一个视频码流的处理,以适应不同的网络带宽、不同的终端处理能力和不同的用户需求。在全景视频转码的过程中主要包括以下几个处理过程:

解码处理,即对全景视频进行解码处理,将全景视频解码成一帧一帧的图像。该全景视频可以从全景视频的视频源获取,也可以是本地存储的全景视频数据。

映射处理,即将解码得到的视频数据映射至n个视角,得到n路视频数据。其中这n个视角是预先设定的,n为预设的正整数,通常为2以上的值。映射的过程主要是将一帧一帧球型的全景视频图像映射至二维的平面图像,在此映射过程中,采用不同视角的模型,使得映射过程中,在特定视角上映射的图像在视角范围内的部分分辨率较高,越远离视角范围的部分分辨率越低。经过n个视角的映射,将一路全景视频转化为n路分别在不同视角上的视频数据。

编码处理,即分别对n路视频数据进行编码,得到n路视频流。

切片和打包处理,即分别对n路视频流进行切片和打包处理后,进行输出。

其中解码、映射和编码处理会带来巨大的计算压力,特别是映射和编码需要执行n路处理,因此在本发明实施例中由gpu执行上述解码、映射和编码中的部分或全部处理。若gpu执行上述解码、映射和编码中的部分处理,则剩余处理仍有cpu执行,但其中的切片和打包处理则由cpu执行。

对于gpu而言,其具有强大的并行计算能力,串行计算能力较弱,特别适合于本发明中涉及的映射和编码的处理,因此,映射和编码的处理可以优先采用gpu执行,但切片和打包处理就非常不适合gpu执行。对于cpu而言,其具有强大的串行计算,并行计算能力较弱,因此切片和打包处理非常cpu执行。当然除了cpu之外,还可以采用其他类型的处理器来代替cpu的工作,例如dsp(数字信号处理器)等。

对于解码处理而言,可以由gpu中的解码硬件加速模块来执行。但由

于gpu的处理能力有限,如果全景视频的分辨率超出gpu的处理能力,则需要由cpu进行解码。在本发明实施例中,可以对全景视频的分辨率是否高于预设的第一阈值进行判断,这里的第一阈值指的是gpu能够解码的全景视频的最高分辨率,由gpu的实际处理能力决定。

对于映射处理而言,可以由gpu中的通用计算模块来执行。这里的映射是将解码得到的视频数据通过计算和转换,映射到特定视角上,其会产生很大的计算量。而通常gpu对于图像的计算能力是非常强大的,因此相比较同等价格或者几倍价格的cpu而言,对图像的计算能力更强。因此,映射处理优选由gpu执行。

但可能存在这样的情况,需要映射的视角数量很大,将解码得到的视频数据映射到其中m个视角就能够将gpu通用计算模块的资源几乎消耗完,那么剩余的n-m个视角的映射处理可以由cpu来执行。其中m的取值可以采用经验值或试验值,例如经过试验后,确定将解码得到的视频数据映射到其中m个视角时尚能够满足实时性要求,若映射到m+1个视角时就无法满足实时性要求,则取m值作为gpu进行映射处理的视角数量。或者经过试验后,确定由gpu将解码得到的视频数据映射到其中m个视角,其余视角由cpu进行映射时,总的处理速率最大,则可以取m值作为gpu进行映射处理的视角数量。当然还可以采用其他方式,在此不再一一穷举。

其中是否满足实时性要求可以体现在gpu的映射处理速率和解码得到的视频数据的输入帧率的关系上,例如若gpu的映射处理速率大于或等于输入帧率,则认为可以满足实时性要求;否则可以认为无法满足实时性要求。或者,是否满足实时性要求也可以体现在缓存解码得到的视频数据的缓存队列的状况上,其中解码后得到的视频数据会被送入该缓存队列,然后gpu的通用计算模块从该缓存队列中读取视频数据进行映射处理,若缓存队列的拥塞状况达到一定程度,则可以认为无法满足实时性要求。

m的值除了取经验值或试验值之外,还可以由cpu根据gpu的实际处理能力灵活确定,例如cpu对gpu的资源占用率进行监测,若gpu对其中m个视角的映射处理就使得资源占用率达到预设的资源占用率阈值,则cpu将接管剩余n-m个视角的映射处理。

对于编码处理而言,可以由gpu的编码硬件加速模块来执行。由于经过映射后,各路视频数据的分辨率会大大降低,通常不会超过gpu的处理能力。但若映射后各路视频数据的分辨率仍超过了gpu的处理能力,则由cpu执行各路视频数据的编码。本发明实施例中,可以对映射后各路视频数据的分辨率是否高于预设的第二阈值进行判断,这里的第二阈值指的是gpu能够编码的视频数据的最高分辨率,由gpu的实际处理能力决定。

另外,若各路视频数据的分辨率在gpu的处理能力之内,但可能存在这样的情况,其中p路视频数据的编码处理就能够将gpu的编码硬件加速模块的资源几乎消耗完,那么剩余的n-p路视频数据的编码处理可以由cpu来执行。其中p的取值可以采用经验值或试验值,例如经过试验后,确定gpu编码p路视频数据尚能够满足实时性要求,若编码p+1路视频数据时就无法满足实时性要求,则取p值作为gpu进行编码处理的路数。或者经过试验后,确定gpu编码p路视频数据,cpu编码剩余n-p路视频数据时,总的处理速率最大,则可以取p值作为gpu进行编码处理的路数。当然还可以采用其他方式,在此不再一一穷举。

同样,是否满足实时性要求可以体现在gpu的编码处理速率和映射得到的视频数据的输入帧率的关系上,例如若gpu的编码处理速率大于或等于输入帧率,则认为可以满足实时性要求;否则可以认为无法满足实时性要求。或者,是否满足实时性要求也可以体现在缓存映射得到的视频数据的缓存队列的状况上,其中映射得到的视频数据会被送入该缓存队列,然后gpu的编码硬件加速模块从该缓存队列中以帧为单位读取视频数据进行编码处理,若缓存队列的拥塞状况达到一定程度,则可以认为无法满足实时性要求。

p的值除了取经验值或试验值之外,还可以由cpu根据gpu的实际处理能力灵活确定,例如cpu对gpu的资源占用率进行监测,若gpu对其中p路视频数据的编码处理就使得资源占用率达到预设的资源占用率阈值,则cpu将接管剩余n-p路视频数据的编码处理。

由以上描述可以看出,可以依据经验或预先的试验结果,确定解码、映射和编码中由gpu处理的部分。也可以至少依据视频属性(例如视频的分辨率、格式等)或gpu处理能力,动态确定解码、映射和编码中由gpu处理的部分。前一种方式实现起来比较简单,能有效提高处理效率。后一种方式更为侧重于实时性能,能在处理过程中根据视频和/或gpu的性能更加灵活地进行动态调整,能够更加充分合理地利用gpu资源及其强大的处理能力,同时也能够最大程度的满足全景视频的实时性要求。

下面举几个实施例:

实施例1:

如图2所示,全景视频的解码处理、对解码得到的视频数据映射至n个视角、将映射后得到的n路视频数据分别进行编码处理均由gpu执行,对编码后各路视频流进行切片和打包处理由cpu执行。

实施例2:

如图3所示,全景视频的解码处理由cpu执行,对解码得到的视频数据映射至n个视角、将映射后得到的n路视频数据分别进行编码处理均由gpu执行,对编码后各路视频流进行切片和打包处理由cpu执行。

实施例3:

如图4所示,全景视频的解码处理由gpu执行;对解码得到的视频数据映射至其中m个视角由gpu执行,映射至剩余n-m个视角由cpu执行;对映射后得到的n路视频数据中的其中p路分别进行编码处理由gpu执行,对剩余n-p路进行编码处理由cpu执行;对编码后各路视频流进行切片和打包处理由cpu执行。

上述仅为列举的几个实施例,但并非所有可实现的方式。对于本发明而言,cpu和gpu联合的架构是非常灵活的,能够根据gpu和cpu的处理能力灵活进行处理任务的配置,从而最大限度的利用gpu和cpu的资源来加速全景视频的转码,提高实时性,不仅适用于vr点播系统,也能够满足vr直播系统的实时性需求。

上述转码方法可以应用于全景视频系统,诸如vr视频系统。全景视频系统主要由客户端和服务提供端组成,其中服务提供端负责向客户端发送视频全景视频数据,客户端负责接收并播放全景视频数据。本发明实施例提供的上述转码方法在服务提供端实现。但需要说明的是,上述的服务提供端可以位于服务器侧,即由服务器侧发送全景视频数据,也可以位于用户设备侧,例如若某用户设备具备提供全景视频数据的能力,也可以由用户设备作为服务提供端来提供全景视频数据。

以上是对本发明所提供的方法进行的描述,下面结合实施例对本发明提供的装置进行详述。

图5为本发明实施例提供的装置结构图,如图5所示,该装置可以包括:解码模块01、映射模块02、编码模块03和切片打包模块04。其中解码模块01、映射模块02、编码模块03中的部分或全部由gpu实现。优选地,解码模块01、映射模块02、编码模块03中的部分由gpu实现可以依据视频属性或gpu处理能力确定。。

解码模块01负责对全景视频进行解码处理。该全景视频可以从全景视频的视频源获取,也可以是本地存储的全景视频数据。

映射模块02负责将解码得到的视频数据映射至n个视角,得到n路视频数据。其中这n个视角是预先设定的,n为预设的正整数,通常为2以上的值。也就是说,将一路全景视频转化为n路分别在不同视角上的视频数据。

编码模块03负责分别对n路视频数据进行编码,得到n路视频流。

切片打包模块04负责对n路视频流分别进行切片和打包处理。

其中,解码模块01若由gpu实现,则可以具体由gpu中的解码硬件加速模块来实现。但由于gpu的处理能力有限,如果全景视频的分辨率超出gpu的处理能力,则需要由cpu进行解码。在本发明实施例中,若全景视频的分辨率高于预设的第一阈值,则解码模块01由中央处理器cpu实现;否则,由gpu实现。

映射模块02可以由gpu中的通用计算模块来执行。但可能存在这样的情况,需要映射的视角数量很大,将解码得到的视频数据映射到其中m个视角就能够将gpu通用计算模块的资源几乎消耗完,那么剩余的n-m个视角的映射处理可以由cpu来执行。具体地,映射模块02可以具体包括:第一映射模块021和第二映射模块022。

其中,第一映射模块021负责将解码得到的视频数据映射至其中m个视角,m≤n。第二映射模块022负责将解码得到的视频数据映射至剩下的n-m个视角。其中第一映射模块021由gpu实现,第二映射模块022由cpu实现。

其中m的取值可以采用经验值或试验值,例如经过试验后,确定将解码得到的视频数据映射到其中m个视角时尚能够满足实时性要求,若映射到m+1个视角时就无法满足实时性要求,则取m值作为gpu进行映射处理的视角数量。或者经过试验后,确定由gpu将解码得到的视频数据映射到其中m个视角,其余视角由cpu进行映射时,总的处理速率最大,则可以取m值作为gpu进行映射处理的视角数量。当然还可以采用其他方式,在此不再一一穷举。

m的值除了取经验值或试验值之外,还可以由cpu根据gpu的实际处理能力灵活确定,例如cpu对gpu的资源占用率进行监测,若gpu对其中m个视角的映射处理就使得资源占用率达到预设的资源占用率阈值,则cpu将接管剩余n-m个视角的映射处理。

编码模块03可以由gpu的编码硬件加速模块来实现。由于经过映射后,各路视频数据的分辨率会大大降低,通常不会超过gpu的处理能力。但若映射后各路视频数据的分辨率仍超过了gpu的处理能力,则由cpu执行各路视频数据的编码。本发明实施例中,可以对映射后各路视频数据的分辨率是否高于预设的第二阈值进行判断,这里的第二阈值指的是gpu能够编码的视频数据的最高分辨率,由gpu的实际处理能力决定。

另外,若各路视频数据的分辨率在gpu的处理能力之内,但可能存在这样的情况,其中p路视频数据的编码处理就能够将gpu的编码硬件加速模块的资源几乎消耗完,那么剩余的n-p路视频数据的编码处理可以由cpu来执行。具体地,编码模块03可以包括:第一编码模块031和第二编码模块032。

第一编码模块031负责对其中p路视频数据进行编码,p≤n;第二编码模块032负责对剩下的n-p路视频数据进行编码;其中第一编码模块031由gpu实现,第二编码模块032由cpu实现。

其中p的取值可以采用经验值或试验值,例如经过试验后,确定gpu编码p路视频数据尚能够满足实时性要求,若编码p+1路视频数据时就无法满足实时性要求,则取p值作为gpu进行编码处理的路数。或者经过试验后,确定gpu编码p路视频数据,cpu编码剩余n-p路视频数据时,总的处理速率最大,则可以取p值作为gpu进行编码处理的路数。当然还可以采用其他方式,在此不再一一穷举。

p的值除了取经验值或试验值之外,还可以由cpu根据gpu的实际处理能力灵活确定,例如cpu对gpu的资源占用率进行监测,若gpu对其中p路视频数据的编码处理就使得资源占用率达到预设的资源占用率阈值,则cpu将接管剩余n-p路视频数据的编码处理。

上述的切片打包模块04由cpu实现。

本发明实施例提供的上述方法和装置可以以设置并运行于设备中的计算机程序体现。该设备可以包括一个或多个处理器,还包括存储器和一个或多个程序,如图6中所示。其中该一个或多个程序存储于存储器中,被上述一个或多个处理器执行以实现本发明上述实施例中所示的方法流程和/或装置操作。例如,被上述一个或多个处理器执行的方法流程,可以包括:

对全景视频进行解码处理;

将解码得到的视频数据映射至n个视角,得到n路视频数据,所述n为预设的正整数;

分别对n路视频数据进行编码,得到n路视频流;

对n路视频流分别进行切片和打包处理;

其中处理器包括cpu和gpu,所述解码、映射和编码中的部分或全部处理由gpu执行。

在此列举一个本发明实施例适用的应用场景:

在vr视频直播系统中,vr视频服务器采用cpu和gpu联合的方式,对vr全景视频进行转码处理,然后将转码处理后的vr视频流发送给vr视频客户端。在vr视频服务器中,合理地对解码处理、映射处理、编码处理进行分配,由gpu执行或者由gpu和cpu联合执行,从而满足vr全景视频直播的实时性。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

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