发明内容
有鉴于此,本公开实施例提供一种全景视频的多窗口播放方法、装置、电子设备及存储介质。
第一方面,本公开实施例提供了一种全景视频的多窗口播放方法,包括:
将全景视频中的视频帧映射为三维模型的表面纹理;
根据与播放窗口对应的播放窗口视场的方向和放大倍数,确定所述播放窗口视场;
根据与所述播放窗口的子窗口对应的子窗口视场的方向和/或放大倍数,确定所述子窗口视场;
对于按照渲染时间的先后顺序排列的待渲染的各个视频帧执行以下操作:
将所述播放窗口视场在对应待渲染的视频帧映射形成的表面纹理中进行投影,并将所述子窗口视场在对应已渲染的视频帧映射形成的表面纹理中进行投影,对应得到处于所述播放窗口视场的纹理区域、以及处于所述子窗口视场的纹理区域;
在所述播放窗口中渲染处于所述播放窗口视场的纹理区域,并在所述子窗口中渲染处于所述子窗口视场的纹理区域;
其中,所述播放窗口与所述子窗口渲染的纹理区域来自同一视频帧或时间上不同步的视频帧。
上述方案中,所述将全景视频中的视频帧映射为三维模型的表面纹理,包括:
将待渲染的所述视频帧的像素点映射到纹理空间,得到所述像素点的纹理坐标;
将所述像素点的纹理坐标映射到所述三维模型的表面的顶点坐标,以形成所述三维模型的表面纹理。
上述方案中,所述根据与播放窗口对应的播放窗口视场的方向和放大倍数,确定所述播放窗口视场,包括:
解析所述全景视频的解码元数据,得到在所述播放窗口中渲染所述视频帧时,所述播放窗口视场的方向和放大倍数;
或者,
解析接收的用于设定方向和放大倍数的操作,确定所述播放窗口视场对应的方向和放大倍数。
上述方案中,所述方法还包括:
通过以下方式确定与所述播放窗口的子窗口对应的子窗口视场方向:
根据接收的表达相对位置关系的操作,确定与所述播放窗口视场的方向满足所述相对位置关系的所述子窗口视场的方向;
或者,
根据所述全景视频中的目标对象,确定包括所述目标对象的视场的方向为与所述子窗口视场的方向。
上述方案中,所述方法还包括:
对于按照渲染时间的先后顺序待渲染的各个视频帧,执行以下操作:
将所述播放窗口视场在对应待渲染的视频帧映射形成的表面纹理中进行投影,得到处于所述播放窗口视场的纹理区域,以及,
将所述子窗口视场在对应待渲染的视频帧映射形成的表面纹理中进行投影,得到处于所述子窗口视场的纹理区域。
第二方面,本公开实施例提供了一种全景视频的多窗口播放装置,包括:
映射单元,用于将全景视频中的视频帧映射为三维模型的表面纹理;
视场单元,用于根据与播放窗口对应的播放窗口视场的方向和放大倍数,确定所述播放窗口视场;根据与所述播放窗口的子窗口对应的子窗口视场的方向和/或放大倍数,确定所述子窗口视场;
纹理单元,用于对于按照渲染时间的先后顺序排列的待渲染的各个视频帧执行以下操作:将所述播放窗口视场在对应待渲染的视频帧映射形成的表面纹理中进行投影,并将所述子窗口视场在对应已渲染的视频帧映射形成的表面纹理中进行投影,对应得到处于所述播放窗口视场的纹理区域、以及处于所述子窗口视场的纹理区域;
渲染单元,用于在所述播放窗口中渲染处于所述播放窗口视场的纹理区域,并在所述子窗口中渲染处于所述子窗口视场的纹理区域;其中,所述播放窗口与所述子窗口渲染的纹理区域来自同一视频帧或时间上不同步的视频帧。
上述方案中,所述映射单元具体用于:
将待渲染的所述视频帧的像素点映射到纹理空间,得到所述像素点的纹理坐标;
将所述像素点的纹理坐标映射到所述三维模型的表面的顶点坐标,以形成所述三维模型的表面纹理。
上述方案中,所述视场单元具体用于:
解析所述全景视频的解码元数据,得到在所述播放窗口中渲染所述视频帧时,所述播放窗口视场的方向和放大倍数;
或者,
解析接收的用于设定方向和放大倍数的操作,确定所述播放窗口视场对应的方向和放大倍数。
上述方案中,所述视场单元具体用于:
根据接收到的表达相对位置关系的操作,确定与所述播放窗口视场的方向满足所述相对位置关系的所述子窗口视场的方向;
或者,
根据所述全景视频中的目标对象,确定包括所述目标对象的视场的方向为与所述子窗口视场的方向。
上述方案中,所述渲染单元,具体用于:
对于按照渲染时间的先后顺序待渲染的各个视频帧执行以下操作:
将所述播放窗口视场在对应待渲染的视频帧映射形成的三维模型的表面纹理中进行投影,得到处于所述播放窗口视场的纹理区域,以及,
将所述子窗口视场在对应待渲染的视频帧映射形成的表面纹理中进行投影,得到处于所述子窗口视场的纹理区域。
第三方面,本公开实施例提供了一种电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述可执行指令时,实现本公开实施例提供的全景视频的多窗口播放方法。
第四方面,本公开实施例提供了一种存储介质,存储有可执行指令,所述可执行指令被执行时,用于实现本公开实施例提供的全景视频的多窗口播放方法。
本公开实施例具有如下有益效果:
通过纹理映射的方式,在全景视频的播放窗口、以及播放窗口的子窗口中渲染视频帧中处于不同视场的内容,使得在观看全景视频时不再受到单一视场的约束,扩展了在全景视频中获取信息的途径,有效提升了在全景视频中展示内容的效率。
具体实施方式
为了使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开作进一步地详细描述,所描述的实施例不应视为对本公开的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本公开保护的范围。在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
对本公开实施例进行进一步详细说明之前,对本公开实施例中涉及的名词和术语进行说明,除非另有定义,本公开实施例所使用的技术和科学术语与属于本公开实施例的技术领域的技术人员通常理解的含义相同。所使用的术语只是为了描述本公开实施例的目的,不是旨在限制本公开实施例,本公开实施例中涉及的名词和术语适用于如下的解释。
1)全景视频,是指在各种电子设备中播放能够供用户裸眼观看的视频,且播放窗口的视场能够进行方向和放大倍数的调整。
2)三维模型,是模拟全景视频所表达的空间的模型,用于将全景视频的视频帧映射到三维模型的表面以形成表面纹理,三维模型的表面一般采用球面或圆柱面。
3)视场,在三维模型的中心的虚拟镜头感知三维模型的表面纹理的视线的集合,更一般地,是指通过一个窗口在全景视频的视频帧中能够观看的区域。
4)播放窗口,全景视频的客户端中默认用于播放全景视频的全屏或非全屏的窗口,至少包括全景视频的视频播放区域,还可以包括设置有相关操作的入口的操作区域。
5)播放窗口视场,即与播放窗口对应的视场,控制在播放窗口中能够感知到视频帧中处于相应视场的部分内容。
6)子窗口,全景视频的客户端中辅助用于播放的非全屏的窗口,小于播放存储,至少包括全景视频的视频播放区域,还可以包括设置有相关操作的入口的操作区域。
7)子窗口视场,即与子窗口对应的视场,控制在窗口中能够感知到的视频帧中处于相应视场的部分内容。
8)纹理,视频帧中的对象在颜色、几何上有规律的特性,以视频帧中各纹理像素的纹理坐标和对应的颜色值表示。
9)纹理区域,视场在三维模型的表面纹理的投影所包括的区域,是三维模型的表面纹理的一个子集,例如全景视频帧能够完整展示的区域的视角在垂直方向和水平方向可以覆盖0至180度,而视场对应的纹理区域覆盖的视角在垂直方向和水平方向可以覆盖0至30度。
下面参见图1,图1是实现本公开实施例的电子设备(例如图1中的电子设备或服务器)100的结构示意图。电子设备可以是各种终端,包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、个人数字助理(PDA,Personal Digital Assistant)、平板电脑(PAD)、便携式多媒体播放器(PMP,Portable Media Player)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字电视(TV)、台式计算机等等的固定终端。图1示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图1所示,电子设备100可以包括处理装置(例如中央处理器、图形处理器等)110,其可以根据存储在只读存储器(ROM,Read-Only Memory)120 中的程序或者从存储装置180加载到随机访问存储器(RAM,Random Access Memory)130中的程序而执行各种适当的动作和处理。在RAM 130中,还存储有电子设备100操作所需的各种程序和数据。处理装置110、ROM 120以及 RAM 130通过总线140彼此相连。输入/输出(I/O,Input/Output)接口150也连接至总线140。
通常,以下装置可以连接至I/O接口150:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置160;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置170;包括例如磁带、硬盘等的存储装置180;以及通信装置190。通信装置190可以允许电子设备100与其他设备进行无线或有线通信以交换数据。虽然图1示出了具有各种装置的电子设备100,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,所提供的流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,计算机程序可以通过通信装置190从网络上被下载和安装,或者从存储装置180被安装,或者从ROM 120被安装。在计算机程序被处理装置110执行时,执行本公开实施例的方法中的功能。
需要说明的是,本公开实施例上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM 或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
在本公开实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本公开实施例中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,计算机可读信号介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、射频(RF,Radio Frequency)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备100中所包含的;也可以是单独存在,而未装配入电子设备100中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得电子设备100执行本公开实施例提供的方法。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、 Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN,Local Area Network))和广域网(WAN,Wide Area Network),以连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
描述于本公开实施例中所涉及到的单元和/或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。
对于硬件的方式来说,实现本公开实施例的电子设备的单元和/或模块可以被一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、 DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,ComplexProgrammable Logic Device)、现场可编程门阵列(FPGA, Field-Programmable GateArray)或其他电子元件实现,用于执行实现本公开实施例提供的方法。
对于软件的方式来说,实现本公开实施例的全景视频的多窗口播放装置的单元和/或模块可以被两个或以上的单元实现,
下面以软件的方式为例,示例性说明实现本公开实施例的全景视频的多窗口播放装置的单元和/或模块。
参见图2,图2是实现本公开实施例的全景视频的多窗口播放装置的一个可选的结构示意图,示出了存储在存储装置180的如下软件模块:映射单元210、视场单元220、纹理单元230和渲染单元240,分别进行说明。
映射单元210,用于将全景视频中的视频帧映射为三维模型的表面纹理。
视场单元220,用于确定与播放窗口对应的播放窗口视场、以及与所述播放窗口的子窗口对应的子窗口视场。
纹理单元230,用于将所述播放窗口视场、以及子窗口视场分别在所述三维模型的表面纹理中进行投影,对应得到处于所述播放窗口视场的纹理区域、以及处于所述子窗口视场的纹理区域。
渲染单元240,用于在所述播放窗口中渲染处于所述播放窗口视场的纹理区域,并在所述子窗口中渲染处于所述子窗口视场的纹理区域。
在一些实施例中,所述映射单元210具体用于:将待渲染的所述视频帧的像素点映射到纹理空间,得到所述像素点的纹理坐标;将所述像素点的纹理坐标映射到所述三维模型表面的顶点坐标,以形成所述三维模型的表面纹理。
在一些实施例中,所述视场单元220具体用于:采用以下方式确定与播放窗口对应的播放窗口视场:解析所述全景视频的解码元数据,得到在所述播放窗口中渲染所述视频帧时,所述播放窗口视场的方向和放大倍数;或者,解析接收的用于设定方向和放大倍数的操作,确定所述播放窗口视场对应的方向和放大倍数。
在一些实施例中,所述视场单元220具体用于:根据接收到的表达相对位置关系的操作,确定与所述播放窗口视场的方向满足所述相对位置关系的所述子窗口视场的方向;或者,根据所述全景视频中的目标对象,确定包括所述目标对象的视场的方向为与所述子窗口视场的方向。
在一些实施例中,所述渲染单元,具体用于:对于按照先后时间顺序待渲染的每个视频帧执行以下操作:将所述播放窗口视场在所述待渲染的视频帧对应的三维模型的表面纹理中进行投影,得到处于所述播放窗口视场的纹理区域,以及,将所述子窗口视场在所述待渲染的视频帧对应的三维模型的表面纹理中进行投影,得到处于所述子窗口视场的纹理区域。
在一些实施例中,所述渲染单元,具体用于:对于按照先后时间顺序待渲染的每个视频帧执行以下操作:将所述播放窗口视场在所述待渲染的视频帧对应的三维模型的表面纹理中进行投影,得到处于所述播放窗口视场的纹理区域;将所述子窗口视场在已渲染的视频帧对应的三维模型的表面纹理中进行投影,得到处于所述子窗口视场的纹理区域。
需要指出,上述单元的分类并不构成对电子设备本身的限定,例如一些单元可以拆分为两个或以上的子单元,或者,一些单元可以合并为一个新的单元。
还需要指出,上述单元的名称在某种情况下并不构成对单元本身的限定,例如,上述映射单元210也可以被描述为“将全景视频中的视频帧映射为三维模型的表面纹理”的单元。
基于同样的理由,电子设备中未详尽描述的单元和/或模块不代表相应的单元和/或模块的缺省,凡是电子设备所执行的操作都可以通过电子设备中的相应的单元和/或模块实现。
继续参见图3,图3是实现本公开实施例的电子设备显示全景视频的一个可选的流程示意图,以处理装置110从只读存储器(ROM)120中的程序或者从存储装置180加载到随机访问存储器(RAM)130中的程序为用于全景视频播放的客户端为例,在全景视频播放的过程中,播放窗口用于展示视频帧的视场(也就是在播放窗口中显示视频帧所采用的视场,下文中简称为播放窗口视场)会不断地发生变化,客户端将根据播放窗口视场的变化,通过纹理映射的方式,在播放窗口中显示顺序解码的视频帧中处于播放窗口视场的内容,并同步播放音频帧。
结合图3示出的步骤说明在电子设备中的客户端在播放窗口进行全景视频播放的过程,需要指出,在下文关于图3的相关说明中,为方便描述,关于图 3的说明中,“视场”即是指代“播放窗口视场”。
在步骤101中,客户端从全景视频的服务器请求全景视频的文件,并加载到客户端的内存(即,RAM 130)中。
例如,在全景视频的在线播放场景中,客户端通过通信装置190向服务器请求当前的播放点(例如起始的播放点或根据用户操作而跳转的播放点)之后的预加载时长(例如1分钟)分段文件,并加载到RAM 130中。预加载时长可由客户端根据电子设备的网络接入类型、带宽等网络参数自动设定,也可以接收用户的设定。
全景视频的分段文件中包括封装了必要的解码元数据和媒体数据(包括音频帧和视频帧),客户端可以对分段文件进行及时地解码,分段文件的时长保证了在客户端中连续的播放效果且不会过分消耗电子设备的带宽。
在一些实施例中,作为步骤101的替代步骤,客户端可以从服务器一次性请求全景视频的完整的文件,并加载到内存中;或者,从存储装置180中读取本地的全景视频的文件,并加载到内存中。
在步骤102中,客户端对加载到内存中的全景视频的文件进行解码,以提取出解码元数据和媒体数据。
按照约定的封装格式例如FLV(Flash Video)、动态图像专家组-4(MPEG-4,Moving Pictures Experts Group-4),全景视频的文件中封装了解码元数据和媒体数据,客户端根据封装格式中约定的位置(例如文件的二进制数据起始的若干字节)从文件中读出解码元数据,就解码元数据而言,指示了各音频帧/视频帧在文件中的存储位置、时间(解码时间/渲染时间)、长度、宽高和分辨率等信息。从而,客户端能够从文件中提取各视频帧和音频帧。
在步骤103中,客户端将媒体数据中的待渲染的视频帧映射为三维模型的表面纹理。
对于在步骤102中解码得到的视频帧,需要进行后续的渲染才能够在播放窗口中显示,因此解码得到的、且未在播放窗口中渲染的视频帧也称为待渲染的视频帧,例如从全景视频的分段文件中解码得到的视频帧,或者从全景视频的完整文件中解码得到的视频帧。
示例性说明待渲染的视频帧基于视频帧在三维模型表面的贴图的实现过程。
首先,客户端将视频帧映射到纹理空间。
视频帧在纹理空间中的纹理以视频帧中各像素的纹理坐标以及对应的颜色值表示,视频帧的像素在纹理空间中的纹理坐标(u,v)上是一个存放视频帧中像素在纹理空间的x轴/y轴的位置的二维数组,从而在纹理空间中可以离散地分离出视频帧中每个像素点的颜色值。
其次,将视频帧在纹理空间的纹理坐标映射到三维模型的表面,以形成三维模型的表面纹理。
例如,可以采用的这样的方式:将视频帧的像素在纹理空间的纹理坐标映射到三维模型的顶点的坐标(x,y,z),三维模型的顶点是将三维模型的表面分割成一系列的图形(例如三角形)的顶点,从而使得无论三维模型如何发生变化,顶点之间的像素点是稳定的。
例如,参见图4A,图4A是实现本公开实施例的电子设备显示全景视频的一个可选的纹理映射示意图,客户端解码媒体数据中的视频帧,以解码得到的视频帧41为例,将视频帧41中各像素点的纹理坐标映射到球面模型42(当然,不局限于球面模型,还可以采用柱面模型等三维模型)的三角形的顶点(三角形将使得球面模型42的表面的纹理稳定,不容易使视频帧中展示的对象发生形变;当然不限于三角形),形成以视频帧41的为表面纹理的球面模型43。
在步骤104中,客户端确定播放窗口中展示全景视频的各视频帧时所使用的视场,即播放窗口视场。
在一些实施例中,客户端根据全景视频的解码元数据对应各视频帧的时间,确定已解码的各视频帧的渲染时间的先后顺序,并顺序确定渲染各视频帧时对应的播放窗口视场,客户端通过视角(决定视场的尺寸)、方向(决定视频帧处于视场的内容在视频帧中的位置)和放大倍数(决定视频帧的内容在视场中成像的尺寸)来确定视场,下面进行说明。
参见图4B,图4B是实现本公开实施例的电子设备显示全景视频的一个可选的视场示意图,播放窗口视场46模拟了人眼47通过输出装置170的显示器显示的播放窗口能够观看到的区域,播放窗口视场46的尺寸取决于播放窗口视场46的水平视角44和垂直视角45,角度越大则播放窗口视场46中能够观看到的视频帧中的内容越多(在播放窗口视场46的放大倍数一定的情况下)。
例如,参见图4C,图4C是实现本公开实施例的电子设备显示全景视频的一个可选的投影示意图,在球面模型43的中心模拟一个如图4B示出的人眼47 的虚拟镜头48,镜头48与播放窗口具有相同的视场,播放窗口视场46在球面模型43的表面纹理中的投影区域即纹理区域49,即是通过播放窗口能够在视频帧中观看到的内容。
视场的水平视角和垂直视角取决于输出装置170中的显示器(例如显示器的宽高),因此,一般地,视场可以使用方向转动参数和镜头缩放参数两个参数进行表示,下面分别进行说明。
方向转动是表示视场的方向的变化,而播放窗口视场46的方向(即视场朝向球面模型43的表面纹理的方向)能够影响客户端在播放窗口中显示的部分内容(即视频帧的部分内容)处于视频帧中的位置。例如,假设播放窗口视场46 相对于图4C示出的朝向球面模型43的方向进行方向转动时,那么,区别于纹理区域49的另一纹理区域的纹理将被渲染到播放窗口中,从而使用户观看到视频帧41中的另一区域的内容。
镜头缩放是表示视场的放大倍数,从而使客户端在播放窗口显示视频帧的内容还受到镜头缩放的约束,在水平视角44和垂直视角45一定(也就是视场的尺寸一定)的情况下,镜头缩放所实现的放大倍数(以大于1表示放大,小于1表示缩小)与播放窗口视场46在球面模型43对应的纹理区域(即视场在球面模型43的表面纹理的投影区域)中纹理的成像尺寸成反比,即放大倍数越小,则成像的尺寸越小,从而播放窗口中能够显示的视频帧41的内容越多,同时能够看到的内容的细节也越少。
在一些实施例中,视场的方向转动和放大倍数可以通过输入装置160接收用户的各种操作来确定,输入装置160中可以设置如陀螺仪、鼠标、键盘、触摸板、操作条和鼠标等支持实施相应的操作。
以方向转动的操作为例,包括移动端的触控拖拽交互、陀螺仪事件,还可以包括电脑(PC)端的鼠标拖拽交互、转动控件和键盘事件。
以镜头缩放的操作为例,包括移动端的双击(或多击)触控操作、双指(或多指)触控操作,还可以包括PC端的触摸板事件、操作条滑动和鼠标滚轮事件。特别地,针对不同类型的事件,客户端可以按照一定的优先级进行响应,例如针对鼠标滚轮的时间兼容性差于触摸板事件和操作条滑动的情况,鼠标滚轮事件的响应优先级可以设置为低于触摸板事件和操作条滑动。
此外,方向转动和镜头缩放的操作的类型不局限于上述类型,例如还可以包括向输入装置160的摄像头实施的面部动作和眼部动作。从而,客户端可以根据用户意愿而显示全景视频处于不同视场的内容,符合用户针对全景视频的个性化的需求。
在另一些实施例中,视场的方向和放大倍数两个参数可以为客户端中根据全景视频的特点而设置的保证观看体验的经验值;或者,可以是从全景视频的文件中读取的参数(由拍摄或发布全景视频的用户设定,可以针对全景视频中对应部分或者全部的时间轴的视频帧而设定),又或者,可以是服务器跟随全景视频而向客户端所下发的参数。
可以理解地,上述确定视场的参数的方式可以择一使用或者结合使用,例如,设置不同来源的参数的优先级,按照优先级的降序使用不同来源的参数,特别地,当没有检测到用户指示参数的操作时,采用客户端中的针对播放效果而优化的参数的默认值,以保证全景视频的最佳播放效果。
在步骤105A中,客户端将以待渲染的视频帧为贴图的三维模型的表面纹理中,与待渲染的视频帧的视场相对应的纹理渲染到输出装置170中的显示器显示的播放窗口。
在一些实施例中,客户端根据视场朝向三维模型的方向,确定三维模型的表面纹理中处于视场的纹理区域,根据区域中的顶点从纹理空间提取与纹理区域相应的纹理,包括顶点在纹理空间中对应的纹理像素、以及顶点之间的区域在纹理空间中对应的纹理像素;采用透视投影的方式(即近大远小的原则),将纹理区域对应的纹理渲染到输出装置170中的显示器显示的播放窗口。
可以理解,由于视场的方向转动/缩放,对三维模型处于视场的纹理区域提取的纹理像素在整体上可以进行相应的旋转/缩放(例如在放大时进行像素插值) 处理。
在步骤105B中,与步骤105A同步地,客户端播放与步骤105A中待渲染视频帧在时间上同步的已解码音频帧。
在步骤106中,客户端判断是否已经渲染完毕内存中的全部待渲染的视频帧,如果是则结束播放;否则,返回步骤104以继续处理下一视频帧,直至渲染完毕内存中的全部待渲染的视频帧。
至此,已经说明了客户端在播放窗口中显示全景视频的过程,客户端能够在播放过程中播放符合用户意愿的视场中的对象,使得用户能够灵活进行视场的方向转动和调整镜头缩放,以关注全景视频中感兴趣的内容,并给用户如同身临其境的感知效果。
为了进一步提升在全景视频的播放窗口展现的信息量,除了在客户端的播放窗口中展示全景视频的内容,本公开实施例还提供了在播放窗口的子窗口中展示同一全景视频的内容的方案,
参见图5,图5是实现本公开实施例的全景视频的多窗口的播放方法的一个可选的流程示意图,将结合图5示出的步骤进行说明。
在步骤201中,将全景视频中的视频帧映射为三维模型的表面纹理。
在步骤202中,确定与播放窗口对应的播放窗口视场、以及与播放窗口的子窗口对应的子窗口视场。
在步骤203中,将播放窗口视场、以及子窗口视场分别在三维模型的表面纹理中进行投影,对应得到处于播放窗口视场的纹理区域、以及处于子窗口视场的纹理区域。
在步骤204中,在播放窗口中渲染处于播放窗口视场的纹理区域,并在子窗口中渲染处于子窗口视场的纹理区域。
从而,通过在客户端中实现播放窗口的子窗口展示内容的方案,拓展了用户从全景视频中获取信息的途径,使用户在观看全景视频的过程中能够更加高效地获取所需要的信息,下面结合图6继续进行说明。
参见图6,图6是实现本公开实施例的全景视频的多窗口的播放方法的一个可选的流程示意图,将结合图6示出的步骤进行说明。
在步骤301中,客户端初始化播放窗口和子窗口。
在一些实施例中,当客户端被启动时,或在后台运行并当接收播放全景视频的操作时,将默认初始化播放窗口。
当默认初始化播放窗口时,还可以默认初始化播放窗口的一个或以上的子窗口,或者,当默认初始化播放窗口时,不默认初始化子窗口,根据图3示出的步骤在播放窗口中播放全景视频,在播放过程中,当接收到开启子窗口的操作时才初始化一个或以上的子窗口。
一般地,播放窗口的视频播放区域大于子窗口的视频播放区域。
开启子窗口的操作方式是多样化的,下面示例性说明。
例如,客户端通过接收子窗口的方向和放大倍数中的至少一个的方式(如果没有接收到参数则可以采用默认值),以确定与子窗口对应的视场(下文中简称为子窗口视场),并初始化具有相应视场的子窗口;在客户端解码全景视频的后续视频帧时,将在子窗口中渲染视频帧中。
又例如,客户端在播放窗口自动识别目标对象时,或接收到用户标识目标对象的操作时,将识别目标对象的图像特征(例如灰度、轮廓等特征)并与子窗口绑定,识别当前视频帧中包括目标对象的视场,并通过如图3示出的纹理映射方式,在子窗口中显示视频帧中处于子窗口视场的内容;当然,后续解码的视频帧将根据子窗口绑定的图形特征继续类似的处理。
此外,为了方便在客户端中实施开启子窗口的操作,客户端的播放窗口除了包括视频播放区域以供显示视频帧中处于播放窗口视场的内容,播放窗口中还可以包括操作区域,其中包括用于初始化子窗口的上述各种形式的入口。
就目标对象而言,可以是在全景视频的播放过程中,客户端从播放窗口/ 子窗口中自动识别的对象(例如人脸和景物等),或者是,用户在播放窗口子窗口中标识的对象。
播放窗口与子窗口的相对位置关系是多样化的。例如,播放窗口与子窗口可以在客户端的不同区域显示。再例如,子窗口可以位于播放窗口的内部并覆盖播放窗口的部分视频播放区域,参见图7,图7是本公开实施例提供的全景视频的多窗口播放的一个可选的示意图,播放窗口71的视频播放区域中部分被子窗口72所覆盖。或者,子窗口可以位于播放窗口的内部,并由播放窗口的视频播放区域避让子窗口。
特别地,当子窗口位于播放窗口的内部时,子窗口在播放窗口的位置,还可以反映与子窗口显示的内容、与播放窗口中显示的内容在视频帧中的相对位置关系,从而当用户需要在播放窗口中显示与子窗口相同的内容时,可以根据相对位置关系快速调整播放窗口的视场的方向,以在播放窗口观看与子窗口相同的内容,由于播放窗口是大于子窗口的,从而能够看到子窗口中无法看到的更多细节。
在步骤302中,从全景视频的服务器请求全景视频的文件,并加载到客户端的内存(RAM 130)中。
步骤302可以根据前述步骤101的说明而实施。
在步骤303中,客户端对加载到内存中的全景视频的文件进行解码,以提取出解码元数据和媒体数据。
步骤303可以根据前述步骤102的说明而实施。
在步骤304中,客户端将媒体数据中的视频帧映射为三维模型表面的纹理。
步骤304可以根据前述步骤103的说明而实施,例如,可以将媒体数据的全部视频帧分别映射到多个相同三维模型,以形成相应的表面纹理,或者,按照视频帧的渲染顺序,当一个视频帧被渲染完毕时才将下一个视频帧映射为三维模型的表面纹理。
在步骤305A中,对于已经解码的各个视频帧,客户端确定在播放窗口中渲染相应的视频帧(也就是待渲染的视频帧)时,播放窗口所对应的播放窗口视场。
播放窗口视场是客户端通过播放窗口视场的方向和放大倍数的两个参数来确定的。
在一些实施例中,播放窗口视场的上述参数是通过解析用户操作的方式来确定,即,客户端通过接收用于设定方向和放大倍数的操作来确定播放窗口视场的方向和放大倍数。
例如,对于播放窗口视场的方向来说,根据在客户端中接收到的表达方向转动的操作(例如包括前述的触控拖拽交互、操作条滑动等),解析触发虚拟镜头实现的方向转动,其表示基于基准方向变化的角度,进而对实现播放窗口视场的虚拟镜头朝向三维模型的表面纹理的方向进行更新,以得到播放窗口视场的更新的方向。
再例如,对于播放窗口视场的放大倍数来说,根据在客户端中接收到的表达镜头缩放的操作(例如包括前述的触摸板事件、鼠标滚轮事件等),解析触发虚拟镜头实现的镜头缩放,进而根据镜头缩放与放大倍数的换算关系,来确定更新的放大倍数。
在另一些实施例中,播放窗口视场采用是预先设定的方式,客户端通过解析全景视频文件的解码元数据而得到在播放窗口视场中渲染各视频帧时所对应的方向和放大倍数,以确定对应的播放窗口视场。
例如,拍摄或发布全景视频的用户,在全景视频的文件中封装解码元数据,其中设定了播放窗口视场中渲染各视频帧的方向和放大倍数。从而,一旦客户端根据约定的封装格式从视频文件中提取出解码元数据,即可确定实现播放窗口视场的更新的方向和放大倍数。
根据上述示例,可以理解地,播放窗口视场的方向和放大倍数也可以是独立于全景视频的播放视场数据,当客户端向服务器请求全景视频的过程中,由服务器向客户端下发,以控制播放窗口视场中渲染全景视频的部分或者全部视频时所使用的方向和放大倍数。
在又一些实施例中,播放窗口视场的方向可以是客户端确定的满足转向条件的方向。可以理解,转向条件采用封装在全景视频的解码元数据中的方式,或者可以是独立于全景视频的转向条件数据,当客户端向服务器请求全景视频时,由服务将转向条件数据和全景视频一起下发。
例如,转向条件可以包括:对于需要突出显示的目标内容(例如高潮情节,植入广告)的时段中的视频帧时,自动转换渲染相应视频帧的播放窗口视场的方向,以使用户不会遗漏。
再例如,转向条件还可以包括:根据特定播放场景(如识别到目标对象),自动转换相应视频帧的播放窗口视场的方向,以使播放窗口能够在全景视频的播放过程中跟踪显示目标对象。
又例如,转向条件还可以包括转换播放视场方向以符合观看体验,例如,通过自动转换播放窗口视场的方向,使播放窗口始终以第一人称视角显示全景视频中处于前进方向的景物。
在又一些实施例中,当没有接收到设定播放窗口视场的操作时,播放窗口视场的方向和放大倍数可以由客户端自动确定。例如,客户端运行人工智能模型,通过对全景视频的各视频帧进行分析,预测保证全景视频的观看体验时合理的方向和放大倍数。
可以理解地,上述的根据用户操作确定播放窗口视场和播放窗口视场是预设的方式可以结合或者择一使用。
在由一些实施例中,在全景视频的一些时段中为了强调一些需要突出显示的目标内容,例如高潮情节或者植入广告,需要在全景视频中显示这些内容的时段(锁定播放窗口视场的方向的时段即为锁定时段)将播放窗口视场锁定在特定的方向(即锁定方向),并设置合适的放大倍数。锁定时段和对应的锁定方向称为播放窗口视场的锁定数据,当然,还可以包括锁定时段和对应的放大倍数,可以理解,锁定方向和放大倍数都是针对锁定时段内的各个视频帧分别设定,或者统一设置。
锁定时段与渲染锁定时段内的视频帧时播放窗口视场的方向、以及锁定时段共同构成锁定数据,作为示例,锁定数据可以封装在全景视频的解码元数据中,在全景视频的解码阶段,由客户端根据约定的封装格式解析全景视频的文件,从解码元数据中提出锁定数据,并判断当前待渲染的视频帧是否处于锁定时段,以及处于锁定时段端是播放窗口需要使用的播放窗口视场。
例如,客户端在解码或在向服务器请求全景视频时,判断是否存在播放窗口视场的锁定数据。
如果存在锁定数据,则根据锁定数据指示的锁定时段,将处于相应锁定时段的视频帧对应的锁定方向,作为在播放窗口中渲染相应视频帧时播放窗口视场的方向,并将处于相应锁定时段的视频帧对应的放大倍数,作为在播放窗口中渲染相应视频帧时播放窗口视场的放大倍数。
如果不存在锁定数据,则客户端可以自动确定播放窗口视场的方向和放大倍数,或者,根据在客户端的操作区域(其中提供了)接收的操作而确定播放窗口视场的方向和放大倍数。
在步骤305B中,与步骤305A同步地,客户端确定与播放窗口的子窗口对应的子窗口视场。
子窗口视场是客户端通过子窗口视场的方向和放大倍数来确定的,可以参考步骤305A说明确定子窗口视场的方式来实施,例如,客户端接收用于设定方向和放大倍数的操作来确定播放窗口视场的方向和放大倍数;或者,通过解析全景视频文件的解码元数据而得到各视频帧对应的方向和放大倍数,以确定对应的播放窗口视场;又或者,播放窗口视场的方向和放大倍数可以由客户端自动确定。
在一些实施例中,子窗口视场还可以根据与播放窗口视场满足相对位置关系来确定,相应的放大倍数可以采用与播放窗口相同的值,或者进行适应缩小放大倍数以与播放窗口显示相同的内容。
例如,当在客户端的操作区域中接收到初始化子窗口的操作时,操作中指示与子窗口视场的方向与播放窗口视场的方向需要满足的相对位置关系为二者的方向相差180度。
在又一些实施例中,对于子窗口视场的方向,可以是根据从全景视频中自动识别的或被用户标识的目标对象时,所确定的包括目标对象的视场的方向为与子窗口视场的方向,对于子窗口视场的放大倍数,可以采用能够在子窗口中目标对象满足一定的辨识度为条件来确定,例如能够在子窗口中完整显示目标对象,或者,能够不失真地显示目标对象的部分(例如人的脸部、上半身)。
例如,客户端默认初始化播放窗口播放全景视频,当接收到播放窗口中标识目标对象(例如人脸、景物或其他任意用户需要跟踪的对象)、并初始化子窗口的操作时,将识别目标对象的图像特征并与子窗口绑定,在后续解码的视频帧中,将根据图像特征识别目标对象,并确定包括目标对象的视场的方向为子窗口视场的方向,以在子窗口中跟踪显示目标对象的成像。
特别地,子窗口视场可以采用与播放窗口视场不同的方向,当然放大倍数也可以有所差异,从而使用户能够观看全景视频的不同区域的内容,扩展了用户从全景视频获取信息的途径。
可以理解地,上述确定播放窗口视场和子窗口视场的不同方式可以任意组合使用。例如,播放窗口视场可以通过解析全景视频文件的解码元数据而得到,子窗口视场可以在客户端中接收的用户操作来确定;再例如,播放窗口视场可以由客户端根据人工智能模型自动确定以保证观看体验,子窗口视场可以由客户端根据接收的用户操作来确定。
在步骤305A和步骤305B的一些实施例中,当确定播放窗口视场和子窗口视场的方向后,还可以根据在客户端中接收的针对播放窗口与子窗口的切换操作,交换播放窗口视场与子窗口视场的方向,当然,由于播放窗口与子窗口的大小存在差异,因此播放窗口与子窗口的放大倍数可以保持不变,以便于利用相对子窗口更大的播放窗口关注之前在子窗口显示的内容,在必要时可以再次切换还原播放窗口视场与子窗口视场的方向,例如在计时时间到达(例如30 秒)后再次切换还原播放窗口视场与子窗口视场的方向,或者,根据用户的操作而切换还原播放窗口视场与子窗口视场的方向。
在步骤306中,将播放窗口视场、以及子窗口视场,分别在映射了待渲染视频帧的三维模型的表面纹理中进行投影,对应得到处于播放窗口的纹理区域、以及处于子窗口的纹理区域。
在一些实施例中,对于全景视频中各个待渲染的视频帧,提供按照全景视频中各视频帧的先后时间顺序,在播放窗口和子播放窗口渲染同一视频帧(当然,所采用的视场可以不同)的方案。
具体来说,对于按照先后时间顺序待渲染的每个视频帧执行以下操作:将播放窗口视场在待渲染的视频帧对应的三维模型的表面纹理中进行投影,得到处于播放窗口视场的纹理区域,以及,将与子窗口视场待渲染的视频帧对应的三维模型的表面纹理中进行投影,得到处于子窗口视场的纹理区域。
从而,全景视频在播放窗口与子窗口的播放进度是同步的,也就是说两个窗口是以各自的视场来渲染同一视频帧,这样,能够通过不同的视场来播放全景视频(当然,也可以采用相同的视场)。
例如,如前所述,假设操作中指示与子窗口视场的方向与播放窗口视场的方向需要满足的相对位置关系为二者的方向相差180度,从而,当播放窗口是显示视频帧中第一人称视角的前进方向的景物时,子窗口能够显示同一视频帧中第一人称视角的反方向的景物,从而用户观看全景视频的视野得以扩展。
再例如,如前所述,当子窗口视场的方向是包括目标对象的视场的方向时,当用户通过播放窗口观看视频帧的一个区域的内容,还可以通过子窗口来观看同一视频帧中包括目标对象(如前,目标对象可以是自动识别的,例如人脸,也可以是根据操作在播放窗口或子窗口中已经渲染的视频帧中所标识的)的区域,从而在不影响全景视频播放的情况下可以同步关注所感兴趣的内容。
需要指出,对于上述的按照先后时间顺序在播放窗口和子播放窗口渲染同一视频帧的情况,由于不同的窗口实质上是利用同一视频帧进行渲染,因此,客户端只需要运行一个实例,从而能够以资源节约的方式完成多个窗口的显示。
在另一些实施例中,对于全景视频中各个待渲染的视频帧,提供按照全景视频中各视频帧的先后时间顺序在播放窗口中渲染,并在子窗口中渲染与播放窗口渲染的视频帧在时间上不同步的视频帧,例如相对于播放窗口回放已经渲染的视频帧。
具体来说,对于按照先后时间顺序待渲染的每个视频帧执行以下操作:将播放窗口视场在待渲染的视频帧对应的三维模型的表面纹理中进行投影,得到处于播放窗口视场的纹理区域;将子窗口视场在已渲染的视频帧对应的三维模型的表面纹理中进行投影,得到处于子窗口视场的纹理区域。
对于已渲染的视频帧来说,已渲染的视频帧可以是全景视频已经播放的任意时段所渲染的视频帧,也可以是与播放窗口的播放时间差值固定(子窗口的时间总是晚于播放窗口十分钟)的视频帧。
这样,在子窗口中可以对播放窗口中已经播放的全景视频进行回放,可以理解地,在回放的过程中,子窗口可以根据用户的操作而改变子窗口视场,从而是用户在会看过程中关注所感兴趣的内容。
在步骤307A中,客户端将在步骤306中确定的处于播放窗口视场的纹理区域,渲染到输出装置170中的显示器显示的播放窗口。
在步骤307B中,与步骤307A同步地,客户端将在步骤306中确定的处于子窗口视场的纹理区域,渲染到输出装置170中的显示器显示的子窗口。
在步骤307C中,与步骤307A和步骤307B同步地,客户端播放与步骤306 中待渲染视频帧的时间上同步的已解码的音频帧。
在步骤308中,客户端判断是否已经渲染完毕内存中的全部的待渲染的视频帧,如果是则结束播放;否则,返回步骤305A 和步骤305B以继续渲染内存中的下一视频帧,直至渲染完毕内存中的全部待渲染的视频帧。
综上所述,本公开实施例具有以下有益效果:
通过纹理映射的方式,在全景视频的播放窗口、以及播放窗口的子窗口中渲染视频帧中处于不同视场的内容,使得在观看全景视频时不再受到单一视场的约束,扩展了在全景视频中获取信息的途径,有效提升了在全景视频中展示内容的效率。
以上描述仅为本公开的实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开实施例中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开实施例构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开实施例中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。