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