视频编码方法及装置与流程

文档序号:15466270发布日期:2018-09-18 19:23阅读:131来源:国知局

本发明涉及编码技术领域,特别涉及一种视频编码方法及装置。



背景技术:

全景视频是由一系列全景图像帧组成的视频,全景图像帧是记录预定视角的景物所形成的图像帧,例如,预定视角为水平360°、垂直180°,或,预定视角为水平360°、垂直270°等等。编码器在通过全景相机得到全景视频后,需要对全景视频进行编码,并将编码后的全景视频发送给解码器进行解码,以便用户观看解码后得到的全景视频。

相关技术提供的一种视频编码方法包括:编码器获取全景视频中的所有全景图像帧;对于每个全景图像帧,将该全景图像帧按照H.264/AVC(Advanced Video Coding,高级视频编码)中定义的语法结构进行编码,得到下标连续的宏块集合,即得到该全景图像帧的编码数据;或者,将每个全景图像帧按照H.265/HEVC(High Efficiency Video Coding,高效视频编码)中定义的语法结构进行编码,得到以块为单元的矩形区域集合,即得到该全景图像帧的编码数据;将每个全景图像帧对应的编码数据发送给解码器。

用户的视角通常在150°左右,所以,全景图像帧中只有150°左右的视角的编码数据是有效的,其余的编码数据都是无效的,接收和解码这些无效的编码数据会造成资源浪费。



技术实现要素:

为了解决接收并解码全景视频中所有的全景图像帧的编码数据,导致资源浪费的问题,本发明实施例提供了一种视频编码方法及装置。所述技术方案如下:

第一方面,提供了一种视频编码方法,所述方法包括:

获取全景视频所述全景视频由全景图像帧组成,所述全景图像帧是记录预定视角的景物所形成的图像帧;

将所述全景视频划分成N个视角视频序列,每个视角视频序列由所述全景视频中所有的全景图像帧中具有相同的水平视角的区域组成,且所述N个视角视频序列的水平视角的总和为所述全景图像帧的总水平视角,所述N为正整数,其中,一个全景图像帧中的各个区域之间互不重叠;

对所述N个视角视频序列分别进行编码,得到N组编码数据

确定用户的观看视角;

选择水平视角包括所述观看视角的视角视频序列,将所述视角视频序列的编码数据提供给所述用户。

第二方面,提供了一种视频编码方法,所述方法包括:

向编码器提供用户的观看视角,所述编码器用于获取全景视频,所述全景视频由全景图像帧组成,所述全景图像帧是记录预定视角的景物所形成的图像帧;将所述全景视频划分成N个视角视频序列;对所述N个视角视频序列分别进行编码,得到N组编码数据;选择水平视角包括所述观看视角的视角视频序列,将所述视角视频序列的编码数据提供给所述用户;每个视角视频序列由所述全景视频中所有的全景图像帧中具有相同的水平视角的区域组成,且所述N个视角视频序列的水平视角的总和为所述全景图像帧的总水平视角,所述N为正整数,其中,一个全景图像帧中的各个区域之间互不重叠,;

接收所述编码器发送的所述编码数据;

对所述编码数据进行解码。

第三方面,提供了一种视频编码装置,所述装置包括:

视频获取模块,用于获取全景视频,所述全景视频由全景图像帧组成,所述全景图像帧是记录预定视角的景物所形成的图像帧;

视频划分模块,用于将所述视频获取模块获取的所述全景视频划分成N个视角视频序列,每个视角视频序列由所述全景视频中所有的全景图像帧中具有相同的水平视角的区域组成,且所述N个视角视频序列的水平视角的总和为所述全景图像帧的总水平视角,所述N为正整数,其中,一个全景图像帧中的各个区域之间互不重叠;

视频编码模块,用于对所述视频划分模块得到的所述N个视角视频序列分别进行编码,得到N组编码数据;

视角确定模块,用于确定用户的观看视角;

第一提供模块,用于选择水平视角包括所述视角确定模块确定的所述观看视角的视角视频序列,将所述视角视频序列的编码数据提供给所述用户。

第四方面,提供了一种视频编码装置,所述装置包括:

视角提供模块,用于向编码器提供用户的观看视角,所述编码器用于获取全景视频,所述全景视频由全景图像帧组成,所述全景图像帧是记录预定视角的景物所形成的图像帧;将所述全景视频划分成N个视角视频序列;对所述N个视角视频序列分别进行编码,得到N组编码数据;选择水平视角包括所述观看视角的视角视频序列,将所述视角视频序列的编码数据提供给所述用户;每个视角视频序列由所述全景视频中所有的全景图像帧中具有相同的水平视角的区域组成,且所述N个视角视频序列的水平视角的总和为所述全景图像帧的总水平视角,所述N为正整数,其中,一个全景图像帧中的各个区域之间互不重叠,;

第一接收模块,用于接收所述编码器发送的所述编码数据;

数据解码模块,用于对所述第一接收模块接收的所述编码数据进行解码。

本发明实施例提供的技术方案的有益效果是:

通过将全景视频划分成N个视角视频序列,对该N个视角视频序列分别进行编码,得到N组编码数据;确定用户的观看视角;选择水平视角包括观看视角的视角视频序列,将视角视频序列的编码数据提供给用户,可以只将与用户的观看视角内的视角视频序列的编码数据提供给用户,避免了传输和解码观看视角外的视角视频序列的编码数据,解决了接收并解码全景视频中所有的全景图像帧的编码数据,导致资源浪费的问题,达到了节省资源的效果。

附图说明

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

图1是本发明各个实施例涉及的视频编码方法的实施环境图;

图2是本发明一个实施例提供的视频编码方法的方法流程图;

图3A是本发明另一实施例提供的视频编码方法的方法流程图;

图3B是本发明另一实施例提供的区域的划分示意图;

图3C是本发明另一实施例提供的视角视频序列的示意图;

图3D是本发明另一实施例提供的传输的视角视频序列中各个区域的示意图;

图3E是本发明另一实施例提供的视频编码方法的示意图;

图4是本发明一个实施例提供的视频编码装置的结构框图;

图5是本发明再一实施例提供的视频编码装置的结构框图;

图6是本发明一个实施例提供的视频编码装置的结构框图;

图7是本发明再一实施例提供的视频编码装置的结构框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

图1是本发明各个实施例涉及的视频编码方法的实施环境图,图1的上图中包括全景相机101和用户设备102,此时,编码器位于全景相机101中,解码器位于用户设备102中。其中,用户设备102可以是虚拟现实头盔、电视、计算机、手机等等,本实施例不作限定。

全景相机101在拍摄得到全景视频后,通过编码器将全景视频划分成N个视角视频序列,对每个视角视频序列进行编码,得到N组编码数据;根据用户的观看视角将对应的编码数据发送给用户设备102,用户设备102通过解码器对该编码数据进行解码,对解码得到的视角视频序列进行播放。

图1的下图中包括全景相机101、服务器102和用户设备103,此时,编码器位于服务器102中,解码器位于用户设备103中。

全景相机101在拍摄得到全景视频后,将全景视频发送给服务器102,服务器102通过编码器将全景视频划分成N个视角视频序列,对每个视角视频序列进行编码,得到N组编码数据;根据用户的观看视角将对应的编码数据发送给用户设备103,用户设备103通过解码器对该编码数据进行解码,对解码得到的视角视频序列进行播放。或者,

图1的下图中包括全景相机101、服务器102和用户设备103,此时,编码器位于全景相机101中,解码器位于用户设备103中。

全景相机101在拍摄得到全景视频后,通过编码器将全景视频划分成N个视角视频序列,对每个视角视频序列进行编码,得到N组编码数据;将N组编码数据发送给服务器102;服务器102根据用户的观看视角将对应的编码数据发送给用户设备103,用户设备103通过解码器对该编码数据进行解码,对解码得到的视角视频序列进行播放。

请参考图2,其示出了本发明一个实施例提供的视频编码方法的方法流程图,该视频编码方法可以应用于图1所示的实施环境中。该视频编码方法,包括:

步骤201,编码器获取全景视频,该全景视频由全景图像帧组成,该全景图像帧是记录预定视角的景物所形成的图像帧。

步骤202,编码器将全景视频划分成N个视角视频序列,每个视角视频序列由全景视频中所有的全景图像帧中具有相同的水平视角的区域组成,且N个视角视频序列的水平视角的总和为全景图像帧的总水平视角,N为正整数,其中,一个全景图像帧中的各个区域之间互不重叠。

步骤203,编码器对N个视角视频序列分别进行编码,得到N组编码数据。

步骤204,解码器向编码器提供用户的观看视角。

步骤205,编码器确定用户的观看视角。

步骤206,编码器选择水平视角包括观看视角的视角视频序列,将该视角视频序列的编码数据提供给用户。

步骤207,解码器接收编码器发送的编码数据。

步骤208,解码器对编码数据进行解码。

其中,步骤201、202、203、205和206可以单独实现成为编码器侧的实施例,步骤204、207和208可以单独实现成为解码器侧的实施例。

综上所述,本发明实施例提供的视频编码方法,通过将全景视频划分成N个视角视频序列,对该N个视角视频序列分别进行编码,得到N组编码数据;确定用户的观看视角;选择水平视角包括观看视角的视角视频序列,将视角视频序列的编码数据提供给用户,可以只将与用户的观看视角内的视角视频序列的编码数据提供给用户,避免了传输和解码观看视角外的视角视频序列的编码数据,解决了接收并解码全景视频中所有的全景图像帧的编码数据,导致资源浪费的问题,达到了节省资源的效果。

请参考图3A,其示出了本发明另一实施例提供的视频编码方法的方法流程图,该视频编码方法可以应用于图1所示的实施环境中。该视频编码方法,包括:

步骤301,编码器获取全景视频,该全景视频由全景图像帧组成,该全景图像帧是记录预定视角的景物所形成的图像帧。

当编码器位于全景相机中时,全景相机先通过不同方位的摄像头拍摄视频,再将所有摄像头在同一时刻拍摄得到的各个图像帧进行拼接,得到各个全景图像帧,再将各个全景图像帧组成全景视频,将该全景视频提供给编码器。当编码器位于服务器中时,全景相机通过上述流程得到全景视频后,将该全景视频发送给服务器,服务器将该全景视频提供给编码器。其中,全景图像帧是记录预定视角的景物所形成的图像帧,例如,预定视角为水平360°、垂直180°,或,预定视角为水平360°、垂直270°等等。

步骤302,根据预设的视角划分规则,编码器将全景视频中的每个全景图像帧按照水平视角划分成N个区域,N为正整数。

视角划分规则用于指示编码器按照水平视角对全景图像帧进行区域划分,一个全景视频中的所有全景图像帧的视角划分规则相同。其中,N个视角视频序列的水平视角的总和为全景图像帧的总水平视角,且一个全景图像帧中的各个区域之间互不重叠。例如,当全景图像帧的总水平视角为360°时,N个视角视频序列的水平视角的总和为360°。

本实施例中,一个全景图像帧中的各个区域的水平视角的区间范围可以相同,也可以不同,本实施例不作限定。例如,视角划分规则是平均划分成4个水平视角,此时,每个水平视角的区间范围是90°,即,将0°-90°作为一个水平视角,将90°-180°作为一个水平视角,将180°-270°作为一个水平视角,将270°-360°作为一个水平视角。或者,在实现时,可以根据用户常用的观看视角来确定视角划分规则,以提高区域划分的准确性。例如,用户常用的观看视角是15°-165°,则视角划分规则是将0°-15°作为一个水平视角,将15°-165°作为一个水平视角,将165°-360°作为一个水平视角。

在根据视角划分规则来划分区域时,假设视角划分规则为平均划分成3个水平视角,则对于全景图像帧0,将水平视角0°-120°的区域作为view0,将120°-240°的区域作为view1,将240°-360°的区域作为view2;对于全景图像帧1,将水平视角0°-120°的区域作为view0,将120°-240°的区域作为view1,将240°-360°的区域作为view2,依次类推,对于全景图像帧M,将水平视角0°-120°的区域作为view0,将120°-240°的区域作为view1,将240°-360°的区域作为view2,请参考图3B所示的区域的划分示意图。

需要说明的是,区域由宏块组成。宏块是视频编码算法中的单位,一个宏块由一个亮度像素块和附加的两个色度像素块组成。一般来说,亮度像素块为16×16大小的像素块,两个色度图像像素块的大小依据其图像的采样格式而定。

当一个区域包括至少两个宏块时,每个区域内的宏块在空域内相互依赖。即,每个区域内,一个宏块的编码数据是依据与其在空域内相邻的宏块的编码数据生成的。

例如,编码器定义F0V1中的宏块1与宏块2相互依赖,此时,宏块1和宏块2在空域上相邻,且宏块1的编码数据是依据宏块2的编码数据生成的。

编码器定义不同区域间的宏块在空域内相互独立。即,不同区域间,在空域内相邻的两个宏块的编码数据无关。

例如,编码器定义F0V1中的宏块1和F0V2中的宏块2不相互依赖,此时,宏块1和宏块2在空域上相邻,且宏块1的编码数据的生成不需要依据宏块2的编码数据。

步骤303,编码器将所有的全景图像帧中具有相同的水平视角的区域组成一个视角视频序列,得到N个视角视频序列。

仍然以上述实例进行说明,请参考图3C所示的视角视频序列的示意图,图3C中将全景图像帧简称为F,将区域简称为V,此时,可以将M个全景图像帧中水平视角为0°-120°的区域进行组合,得到视角视频序列F0V0、F1V0…FMV0;将M个全景图像帧中水平视角为120°-240°的区域进行组合,得到视角视频序列F0V1、F1V1…FMV1;将M个全景图像帧中水平视角为240°-360°的区域进行组合,得到视角视频序列F0V2、F1V2…FMV2。

其中,每个视角视频序列内的各个区域在时域上相互依赖。即,每个视角视频序列内,第j个区域的编码数据是依据第j-1个区域的编码数据生成的;或者,第j个区域的编码数据是依据第j-1个区域的编码数据和第l个区域的编码数据生成的,j和l均为正整数,且l>j≥2。

例如,编码器定义F0V1与F1V1相互依赖,此时,F1V1的编码数据是依据F0V1的编码数据生成的。

其中,不同视角视频序列间的各个区域在时域上相互独立。即,不同视角视频序列间,任意两个区域的编码数据在时域上无关。

例如,编码器定义F0V1与F1V2不相互依赖,此时,F1V2的编码数据的生成不需要依据F0V1的编码数据。

步骤304,编码器对N个视角视频序列分别进行编码,得到N组编码数据。

编码器对每一个视角视频序列进行编码,得到对应的一组编码数据。例如,编码器对视角视频序列F0V0、F1V0…FMV0进行编码,得到一组编码数据;对视角视频序列F0V1、F1V1…FMV1进行编码,得到一组编码数据;对视角视频序列F0V2、F1V2…FMV2进行编码,得到一组编码数据。

需要说明的是,当编码器需要向多个用户提供全景视频的编码数据时,编码器可以预先得到全部N个视角视频序列的编码数据,再根据不同用户的观看视角,将对应的视角视频序列的编码数据提供给不同用户。当编码器只需要为一个用户提供全景视频的编码数据时,可以根据该用户的观看视角,编码器只对对应的视角视频序列进行编码,并将编码数据提供给该用户,以节省资源。

步骤305,解码器向编码器提供用户的观看视角。

解码器先获取用户的观看视角,再将该观看视角发送给编码器。其中,解码器可以根据用户设备中的姿态传感器得到用户头部转动角度获取观看视角,也可以获取用户输入的观看视角,本实施例不作限定。

步骤306,编码器确定用户的观看视角。

编码器可以获取默认的观看视角,将该观看视角确定为用户的观看视角,此时可以不执行步骤305,或者,编码器还可以接收解码器发送的观看视角,此时执行步骤305。

步骤307,编码器选择水平视角包括观看视角的视角视频序列,将该视角视频序列编码数据提供给用户。

编码器可以只选择一个水平视角,且该水平视角包括观看视角。例如,当用户的观看视角是15°-165°时,若存在水平视角为15°-165°的视角视频序列,则可以选择水平视角为15°-165°的视角视频序列;若不存在水平视角为15°-165°的视角视频序列,只存在水平视角为10°-180°的视角视频序列,则可以选择水平视角为10°-180°的视角视频序列。

编码器也可以选择至少两个相邻的水平视角,且该至少两个相邻的水平视角组合后的水平视角包括观看视角。例如,当用户的观看视角是15°-165°时,若存在水平视角为10°-95°的视角视频序列和水平视角为95°-170°的视角视频序列,则可以选择这两个视角视频序列,组合后的水平视角为10°-170°,包括观看视角15°-165°。

编码器在确定视角视频序列后,获取该视角视频序列对应的编码数据,将该编码数据提供给用户。

本实施例中,编码器可以按照编码数据的生成时刻由早到晚的顺序,将各组编码数据依次提供给用户。例如,视角视频序列为F0V0、F1V0…FMV0,编码器可以在时刻T0将F0V0的编码数据提供给用户,在时刻T1将F1V0的编码数据提供给用户,…,在时刻TM将FMV0的编码数据提供给用户。

步骤308,解码器接收编码器发送的编码数据。

对应于编码器对编码数据的发送形式,解码器可以按照编码数据的发送顺序,依次接收视角视频序列中每个区域的编码数据。

例如,视角视频序列为F0V0、F1V0…FMV0,解码器可以在时刻T0接收F0V0的编码数据,在时刻T1接收F1V0的编码数据,…,在时刻TM接收FMV0的编码数据。

由于用户在观看过程中可能会转动头部,导致观看视角发生变化,此时,编码器需要确定变化后的观看视角,并根据变化后的观看视角调整发送的编码数据。具体地,本实施例提供的视频编码方法还包括:

1)若在时刻Ti时确定用户的观看视角发生变化,则禁止发送视角视频序列中的第i个区域的编码数据,i为正整数;

2)选择更新视角视频序列,将更新视角视频序列中的第i个区域的编码数据提供给用户,更新视角视频序列是水平视角与变化后的观看视角匹配的视角视频序列;

3)将i更新为i+1,循环执行在时刻Ti时,将更新视角视频序列中的第i个区域的编码数据提供给用户的步骤。

其中,时刻Ti是编码器确定用户的观看时间发生变化的时刻,由于将观看视角发生变化通知给编码器需要消耗时间,因此,实际用户的观看视角发生变化的时刻可能早于时刻Ti,可以是时刻Ti-1,时刻Ti-2等,这取决于通知的传输时延。例如,用户在时刻Ti-1调整观看视角,则解码器在时刻Ti-1确定观看视角发生变化,此时通知编码器,编码器在时刻Ti确定观看视角发生变化。

在实际实现时,假设在T0时刻根据用户的观看视角确定的视角视频序列为F0V0、F1V0…FMV0,编码器依次发送每个区域的编码数据,当编码器在时刻T3时确定用户的观看视角发生变化,且根据变化后的观看视角确定的更新视角视频序列为F0V1、F1V1…FMV1,则依次发送的编码数据所对应的区域为:F0V0、F1V0、F2V0、F3V1、F4V1…FMV1。

本实施例中,每个视角视频序列内的各个区域在时域上相互依赖,即视角视频序列中后一区域的解码需要依赖于自IDR(Instantaneous Decoding Refresh,即时解码刷新)帧开始的所有前向区域。当观看视角发生变化时,解码器只接收到更新视角视频序列中的一个区域的编码数据,由于该区域的解码需要依赖于前向区域,因此,编码器还需要将该区域的所有前向区域的编码数据发送给解码器。为了节省传输该前向区域的时间,以避免播放卡顿的问题,编码器还可以预测在观看视角发生变化时可能的更新视角视频序列,并将该预测的更新视角视频序列的编码数据发送给解码器。

由于用户通常是缓慢转动头部来调整观看视角的,因此,可以将与步骤307中选择的视角视频序列相邻的视角视频序列作为预测的更新视角视频序列,此时执行步骤309。

步骤309,编码器获取与该水平视角相邻,且小于该水平视角的连续n个水平视角所对应的视角视频序列;获取与该水平视角相邻,且大于该水平视角的连续m个水平视角所对应的视角视频序列,n和m均为正整数,且n+m≤N-1;将该n+m个视角视频序列中的属于同一全景图像帧的每n+m个区域的编码数据依次提供给用户。

例如,假设4个视角视频序列的水平视角分别为0°-15°,15°-165°,165°-180°,180°-360°,且步骤307中选择的是水平视角为15°-165°的视角视频序列F0V1、F1V1…FMV1,此时可以确定小于15°-165°,且与15°-165°相邻的水平视角为0°-15°,获取水平视角为0°-15°的视角视频序列F0V0、F1V0…FMV0;还可以确定大于15°-165°,且与15°-165°相邻的水平视角为165°-180°,获取水平视角为165°-180°的视角视频序列F0V2、F1V2…FMV2。

在确定出n+m个视角视频序列后,编码器可以在每个时刻时,将n+m个视角视频序列中的属于同一全景图像帧的n+m个区域的编码数据提供给用户。例如,在时刻T0时,将属于全景图像帧0的n+m个区域的编码数据提供给用户,即,F0V0和F0V2的编码数据;在时刻T1时,将属于全景图像帧1的n+m个区域的编码数据提供给用户,即,F1V0和F1V2的编码数据;…;在时刻TM时,将属于全景图像帧M的n+m个区域的编码数据提供给用户,即,FMV0和FMV2的编码数据。

需要说明的是,编码器可以将n+m个视角视频序列的编码数据和步骤307中的编码数据一起提供给用户,以避免视角转换时的卡顿。例如,在时刻T0将F0V0、F0V1和F0V2的编码数据提供给用户,在时刻T1将F1V0、F1V1和F1V2的编码数据提供给用户,…,在时刻TM将FMV0、FMV1和FMV2的编码数据提供给用户。

本实施例中,若编码器只提供与观看视角匹配的视角视频序列的编码数据,此时传输占用的带宽资源较少,若用户的观看视角发生变化,由于需要传输其他的视角视频序列,会造成播放卡顿的问题;若编码器不仅提供与观看视角匹配的视角视频序列的编码数据,还提供n+m个其他视角视频序列的编码数据,虽然传输占用的带宽资源较多,但在用户的观看视角发生变化时,可以立即播放缓存的视角视频序列,使得视频播放更为流畅。

当n+m<N-1时,由于不需要传输所有的全景视频的编码数据,可以节省带宽资源。

请参考图3D所示的传输的视角视频序列中各个区域的示意图,图3D中在T0时刻与观看视角对应的视角视频序列是Vn,则在T0时刻缓存的视角视频序列是Vn-1和Vn+1。当在T1时刻编码器确定用户的观看视角发生变化时,此时,与观看视角对应的视角视频序列是Vn-1,则在T1时刻缓存的视角视频序列是Vn-2和Vn。

步骤310,解码器依次接收n+m个视角视频序列中属于同一全景图像帧的每n+m个区域的编码数据。

对应于编码器对编码数据的发送形式,解码器可以按照编码数据的发送顺序,依次接收n+m个视角视频序列中属于同一全景图像帧的每n+m个区域的编码数据。

例如,解码器可以在时刻T0接收F0V0和F0V2的编码数据,在时刻T1接收F1V0和F1V2的编码数据,…,在时刻TM接收FMV0和FMV2的编码数据。

当编码器将n+m个视角视频序列的编码数据和步骤307中的编码数据一起提供给用户时,步骤310可以和步骤308合并。即,解码器可以在时刻T0接收F0V0、F0V1和F0V2的编码数据,在时刻T1接收F1V0、F1V1和F1V2的编码数据,…,在时刻TM接收FMV0、FMV1和FMV2的编码数据。

步骤311,解码器对编码数据进行解码。

本实施例中,依次接收n+m个视角视频序列中的属于同一全景图像帧的每n+m个区域的编码数据之后,编码器提供了两种对理编码数据的处理方式,下面分别对这两种处理方式进行介绍。

在第一种处理方式中,对当前时刻接收的、水平视角与观看视角匹配的视角视频序列中的区域的编码数据进行解码,并播放得到的区域;对当前时刻接收的n+m个视角视频序列中的n+m个区域的编码数据进行缓存。

由于只需要对观看视角对应的区域的编码数据进行解码,对其他区域的编码数据不解码,可以节省资源,这种处理方式适用于观看视角变化较少的场景中。

例如,当前时刻是T0时刻,且与观看视角对应的区域是F0V1,则解码器解码并播放F0V1的编码数据,缓存F0V0和F0V2的区域的编码数据。此时,由于不需要解码F0V0和F0V2的区域的编码数据,因此,可以节省资源。

若在时刻Ti时解码器确定用户的观看视角发生变化,则对应于第一种处理方式,解码器从缓存的n+m个区域的编码数据中,选择更新视角视频序列中的第i个区域的编码数据,对编码数据进行解码,并播放得到的第i个区域。

例如,在T0时刻时与观看视角对应的视角视频序列为V2,此时,解码器接收到F0V1、F0V2和F0V3的编码数据,播放F0V2;在T1时刻时解码器确定用户的观看视角发生变化,由于此时编码器还不知道用户的观看视角发生变化,传输F1V1、F1V2和F1V3的编码数据,此时,解码器接收到F1V1、F1V2和F1V3的编码数据,由于对F1V1的解码需要依赖于F0V1,因此,解码器可以先解码F0V1的编码数据,再根据得到的F0V1解码F1V1的编码数据,播放得到的F1V1;在T2时刻时编码器确定用户的观看视角发生变化,传输F2V0、F2V1和F2V2的编码数据,此时,解码器接收到F2V0、F2V1和F2V2的编码数据,根据之前解码得到的F1V1解码F2V1的编码数据,播放得到的F2V1,依次类推。

在第二种处理方式中,对当前时刻接收的、水平视角与观看视角匹配的视角视频序列中的区域的编码数据进行解码,并播放得到的区域;对当前时刻接收的n+m个视角视频序列中的n+m个区域的编码数据进行解码,并缓存得到的n+m个区域。

例如,当前时刻是T0时刻,且与观看视角对应的区域是F0V1,则解码器解码并播放F0V1的编码数据,解码并缓存F0V0和F0V2的编码数据。

若在时刻Ti时用户的观看视角发生变化,则对应于第二种处理方式,解码器从缓存的n+m个区域中,选择更新视角视频序列中的第i个区域,并播放第i个区域。

例如,在T0时刻时与观看视角对应的视角视频序列为V2,此时,解码器接收并解码F0V1、F0V2和F0V3的编码数据,播放F0V2;在T1时刻时解码器确定用户的观看视角发生变化,由于此时编码器还不知道用户的观看视角发生变化,传输F1V1、F1V2和F1V3的编码数据,此时,解码器接收到F1V1、F1V2和F1V3的编码数据,由于对F1V1的解码需要依赖于F0V1且已经解码得到F0V1,因此,解码器可以直接根据F0V1解码F1V1的编码数据,播放得到的F1V1;在T2时刻时编码器确定用户的观看视角发生变化,传输F2V0、F2V1和F2V2的编码数据,此时,解码器接收到F2V0、F2V1和F2V2的编码数据,根据F1V1解码F2V1的编码数据,播放得到的F2V1,依次类推。

由于需要实时解码所有区域的编码数据,以提高对播放的流畅性,这种实现方式适用于观看视角变化较多的场景中。

其中,步骤301、302、303、304、306、307和309可以单独实现成为编码器侧的实施例,步骤305、308、310和311可以单独实现成为解码器侧的实施例。

为了便于理解,本实施例以编码器位于全景相机中,解码器位于用户设备中,且存在服务器来进行举例说明,请参考图3E所示的视频编码方法的示意图,其具体实现过程如下:

步骤3011,全景相机通过摄像头拍摄全景视频。

步骤3012,全景相机通过编码器将全景视频划分成N个视角视频序列进行编码,得到N组编码数据。

步骤3013,全景相机将N组编码数据发送给服务器。

步骤3014,服务器接收N组编码数据。

步骤3015,用户设备向服务器发送用户的观看视角。

步骤3016,服务器接收用户的观看视角。

步骤3017,服务器选择水平视角包括观看视角的视角视频序列,并获取其他n+m个视角视频序列。

其中,n+m个视角视频序列的获取过程详见步骤309中的描述。

步骤3018,服务器将该视角视频序列和该n+m个视角视频序列的编码数据发送给用户设备。

步骤3019,用户设备接收该视角视频序列和该n+m个视角视频序列的编码数据。

步骤3020,用户设备通过解码器解码水平视角与观看视角匹配的视角视频序列编码数据,并播放得到的视角视频序列;缓存n+m个视角视频序列的编码数据。

综上所述,本发明实施例提供的视频编码方法,通过将全景视频划分成N个视角视频序列,对该N个视角视频序列分别进行编码,得到N组编码数据;确定用户的观看视角;选择水平视角包括观看视角的视角视频序列,将视角视频序列的编码数据提供给用户,可以只将与用户的观看视角内的视角视频序列的编码数据提供给用户,避免了传输和解码观看视角外的视角视频序列的编码数据,解决了接收并解码全景视频中所有的全景图像帧的编码数据,导致资源浪费的问题,达到了节省资源的效果。

另外,通过获取与水平视角相邻,且小于水平视角的连续n个水平视角所对应的视角视频序列;获取与水平视角相邻,且大于水平视角的连续m个水平视角所对应的视角视频序列;将所述n+m个视角视频序列中的属于同一全景图像帧的每n+m个区域的编码数据依次提供给用户,可以将水平视角与观看视角相邻的视角视频序列的编码数据提供给用户,使得观看视角变化时,解码器可以立即从缓存的编码数据中获取对应的编码数据,解决了在观看视角变化时,编码器需要将水平视角与变化后的观看视角匹配的视角视频序列的编码数据发送给解码器,导致播放卡顿的问题,达到了提高视频播放的流畅性的效果。

请参考图4,其示出了本发明一个实施例提供的视频编码装置的结构框图,该视频编码方法可以应用于图1所示的实施环境中。该视频编码装置,包括:

视频获取模块410,用于获取全景视频,全景视频由全景图像帧组成,全景图像帧是记录预定视角的景物所形成的图像帧;

视频划分模块420,用于将视频获取模块410获取的全景视频划分成N个视角视频序列,每个视角视频序列由全景视频中所有的全景图像帧中具有相同的水平视角的区域组成,且N个视角视频序列的水平视角的总和为全景图像帧的总水平视角,N为正整数,其中,一个全景图像帧中的各个区域之间互不重叠;

视频编码模块430,用于对视频划分模块420得到的N个视角视频序列分别进行编码,得到N组编码数据;

视角确定模块440,用于确定用户的观看视角;

第一提供模块450,用于选择水平视角包括视角确定模块440确定的观看视角的视角视频序列,将视角视频序列的编码数据提供给用户。

综上所述,本发明实施例提供的视频编码装置,通过将全景视频划分成N个视角视频序列,对该N个视角视频序列分别进行编码,得到N组编码数据;确定用户的观看视角;选择水平视角包括观看视角的视角视频序列,将视角视频序列的编码数据提供给用户,可以只将与用户的观看视角内的视角视频序列的编码数据提供给用户,避免了传输和解码观看视角外的视角视频序列的编码数据,解决了接收并解码全景视频中所有的全景图像帧的编码数据,导致资源浪费的问题,达到了节省资源的效果。

请参考图5,其示出了本发明再一实施例提供的视频编码装置的结构框图,该视频编码方法可以应用于图1所示的实施环境中。该视频编码装置,包括:

视频获取模块510,用于获取全景视频,全景视频由全景图像帧组成,全景图像帧是记录预定视角的景物所形成的图像帧;

视频划分模块520,用于将视频获取模块510获取的全景视频划分成N个视角视频序列,每个视角视频序列由全景视频中所有的全景图像帧中具有相同的水平视角的区域组成,且N个视角视频序列的水平视角的总和为全景图像帧的总水平视角,N为正整数,其中,一个全景图像帧中的各个区域之间互不重叠;

视频编码模块530,用于对视频划分模块520得到的N个视角视频序列分别进行编码,得到N组编码数据;

视角确定模块540,用于确定用户的观看视角;

第一提供模块550,用于选择水平视角包括视角确定模块540确定的观看视角的视角视频序列,将视角视频序列的编码数据提供给用户。

可选的,视频划分模块520,包括:

区域划分单元521,用于根据预设的视角划分规则,将全景视频中的每个全景图像帧按照水平视角划分成N个区域;

序列生成单元522,用于将区域划分单元521划分的所有的全景图像帧中具有相同的水平视角的区域组成一个视角视频序列,得到N个视角视频序列。

可选的,第一提供模块540,还用于:

若在时刻Ti时确定用户的观看视角发生变化,则禁止发送视角视频序列中的第i个区域的编码数据,i为正整数;

选择更新视角视频序列,将更新视角视频序列中的第i个区域的编码数据提供给用户,更新视角视频序列是水平视角与变化后的观看视角匹配的视角视频序列;

将i更新为i+1,循环执行在时刻Ti时,将更新视角视频序列中的第i个区域的编码数据提供给用户的步骤。

可选的,本实施例提供的视频编码装置还包括:

序列选择模块560,用于在第一提供模块550选择水平视角与观看视角匹配的视角视频序列之后,获取与水平视角相邻,且小于水平视角的连续n个水平视角所对应的视角视频序列;获取与水平视角相邻,且大于水平视角的连续m个水平视角所对应的视角视频序列,n和m均为正整数,且n+m≤N-1;

第二提供模块570,用于将序列选择模块560选择的n+m个视角视频序列中的属于同一全景图像帧的每n+m个区域的编码数据提供给用户。

可选的,每个视角视频序列内,第j个区域的编码数据是依据第j-1个区域的编码数据生成的;或者,第j个区域的编码数据是依据第j-1个区域的编码数据和第l个区域的编码数据生成的,j和l均为正整数,且l>j≥2;

不同视角视频序列间,任意两个区域的编码数据在时域上无关。

可选的,当区域包括至少两个宏块时,

每个区域内,一个宏块的编码数据是依据与其在空域内相邻的宏块的编码数据生成的;

不同区域间,在空域内相邻的两个宏块的编码数据无关。

综上所述,本发明实施例提供的视频编码装置,通过将全景视频划分成N个视角视频序列,对该N个视角视频序列分别进行编码,得到N组编码数据;确定用户的观看视角;选择水平视角包括观看视角的视角视频序列,将视角视频序列的编码数据提供给用户,可以只将与用户的观看视角内的视角视频序列的编码数据提供给用户,避免了传输和解码观看视角外的视角视频序列的编码数据,解决了接收并解码全景视频中所有的全景图像帧的编码数据,导致资源浪费的问题,达到了节省资源的效果。

另外,通过获取与水平视角相邻,且小于水平视角的连续n个水平视角所对应的视角视频序列;获取与水平视角相邻,且大于水平视角的连续m个水平视角所对应的视角视频序列;将所述n+m个视角视频序列中的属于同一全景图像帧的每n+m个区域的编码数据依次提供给用户,可以将水平视角与观看视角相邻的视角视频序列的编码数据提供给用户,使得观看视角变化时,解码器可以立即从缓存的编码数据中获取对应的编码数据,解决了在观看视角变化时,编码器需要将水平视角与变化后的观看视角匹配的视角视频序列的编码数据发送给解码器,导致播放卡顿的问题,达到了提高视频播放的流畅性的效果。

请参考图6,其示出了本发明一个实施例提供的视频编码装置的结构框图,该视频编码方法可以应用于图1所示的实施环境中。该视频编码装置,包括:

视角提供模块610,用于向编码器提供用户的观看视角,编码器用于获取全景视频,所述全景视频由全景图像帧组成,所述全景图像帧是记录预定视角的景物所形成的图像帧;将全景视频划分成N个视角视频序列;对所述N个视角视频序列分别进行编码,得到N组编码数据;选择水平视角包括观看视角的视角视频序列,将视角视频序列的编码数据提供给用户;每个视角视频序列由全景视频中所有的全景图像帧中具有相同的水平视角的区域组成,且N个视角视频序列的水平视角的总和为全景图像帧的总水平视角,N为正整数,其中,一个全景图像帧中的各个区域之间互不重叠;

第一接收模块620,用于接收编码器发送的编码数据;

数据解码模块630,用于对第一接收模块620接收的所述编码数据进行解码。

综上所述,本发明实施例提供的视频编码装置,通过向编码器提供用户的观看视角,使得编码器将全景视频划分成N个视角视频序列,对该N个视角视频序列分别进行编码,得到N组编码数据;选择水平视角包括观看视角的视角视频序列,将视角视频序列的编码数据提供给用户,避免了传输和解码观看视角外的视角视频序列的编码数据,解决了接收并解码全景视频中所有的全景图像帧的编码数据,导致资源浪费的问题,达到了节省资源的效果。

请参考图7,其示出了本发明再一实施例提供的视频编码装置的结构框图,该视频编码方法可以应用于图1所示的实施环境中。该视频编码装置,包括:

视角提供模块710,用于向编码器提供用户的观看视角,编码器用于获取全景视频,所述全景视频由全景图像帧组成,所述全景图像帧是记录预定视角的景物所形成的图像帧;将全景视频划分成N个视角视频序列;对所述N个视角视频序列分别进行编码,得到N组编码数据;选择水平视角包括观看视角的视角视频序列,将视角视频序列的编码数据提供给用户;每个视角视频序列由全景视频中所有的全景图像帧中具有相同的水平视角的区域组成,且N个视角视频序列的水平视角的总和为全景图像帧的总水平视角,N为正整数,其中,一个全景图像帧中的各个区域之间互不重叠,;

第一接收模块720,用于接收编码器发送的编码数据;

数据解码模块730,用于对第一接收模块720接收的所述编码数据进行解码。

可选的,本实施例提供的视频编码装置还包括:

第二接收模块740,用于依次接收n+m个视角视频序列中属于同一全景图像帧的每n+m个编码数据,n+m个视角视频序列是与水平视角相邻,且小于水平视角的连续n个水平视角所对应的视角视频序列,以及,与水平视角相邻,且大于水平视角的连续m个水平视角所对应的视角视频序列,n和m均为正整数,且n+m≤N-1。

可选的,数据解码模块730,包括:

第一处理单元731,用于对当前时刻接收的、水平视角与观看视角匹配的视角视频序列中的区域的编码数据进行解码,并播放得到的区域;对当前时刻接收的n+m个视角视频序列中的n+m个区域的编码数据进行缓存。

可选的,数据解码模块730,还包括:

第二处理单元732,用于若在时刻Ti时用户的观看视角发生变化,则从第一处理单元731缓存的n+m个区域的编码数据中,选择更新视角视频序列中的第i个区域的编码数据,对编码数据进行解码,并播放得到的第i个区域;

其中,更新视角视频序列是水平视角与变化后的观看视角匹配的视角视频序列。

可选的,数据解码模块730,包括:

第三处理单元733,用于对当前时刻接收的、水平视角与观看视角匹配的视角视频序列中的区域的编码数据进行解码,并播放得到的区域;对当前时刻接收的n+m个视角视频序列中的n+m个区域的编码数据进行解码,并缓存得到的n+m个区域。

可选的,数据解码模块730,还包括:

第四处理单元734,用于若在时刻Ti时用户的观看视角发生变化,则从第三处理单元733缓存的n+m个区域中,选择更新视角视频序列中的第i个区域,并播放第i个区域;

其中,更新视角视频序列是水平视角与变化后的观看视角匹配的视角视频序列。

综上所述,本发明实施例提供的视频编码装置,通过向编码器提供用户的观看视角,使得编码器将全景视频划分成N个视角视频序列,对该N个视角视频序列分别进行编码,得到N组编码数据;选择水平视角包括观看视角的视角视频序列,将视角视频序列的编码数据提供给用户,避免了传输和解码观看视角外的视角视频序列的编码数据,解决了接收并解码全景视频中所有的全景图像帧的编码数据,导致资源浪费的问题,达到了节省资源的效果。

另外,通过依次接收n+m个视角视频序列中属于同一全景图像帧的每n+m个区域的编码数据,n+m个视角视频序列是编码器获取的与水平视角相邻,且小于水平视角的连续n个水平视角所对应的视角视频序列,以及,编码器获取的与水平视角相邻,且大于水平视角的连续m个水平视角所对应的视角视频序列,编码器将水平视角与观看视角相邻的视角视频序列的编码数据提供给用户,使得观看视角变化时,解码器可以立即从缓存的编码数据中获取对应的编码数据,解决了在观看视角变化时,编码器需要将水平视角与变化后的观看视角匹配的视角视频序列的编码数据发送给解码器,导致播放卡顿的问题,达到了提高视频播放的流畅性的效果。

需要说明的是:上述实施例提供的视频编码装置在进行视频编码时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将视频编码装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的视频编码装置与视频编码方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

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

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