具体实施方式
在下文中将结合附图对本公开的示范性实施例进行描述。为了清楚和简明起见,在说明书中并未描述实际实施方式的所有特征。然而,应该了解,在开发任何这种实际实施例的过程中必须做出很多特定于实施方式的决定,以便实现开发人员的具体目标,例如,符合与系统及业务相关的那些限制条件,并且这些限制条件可能会随着实施方式的不同而有所改变。此外,还应该了解,虽然开发工作有可能是非常复杂和费时的,但对得益于本公开内容的本领域技术人员来说,这种开发工作仅仅是例行的任务。
在此,还需要说明的一点是,为了避免因不必要的细节而模糊了本公开,在附图中仅仅示出了与根据本公开的方案密切相关的装置结构和/或处理步骤,而省略了与本公开关系不大的其他细节。
本公开的实施例提供了一种基于单向通信的全景视频播放拍照系统,包括图像采集端、流媒体服务器端以及一个或多个用户端;图像采集端包括摄像模块、多媒体处理模块和第一传输模块;摄像模块适于采集其视野内的多路图片数据;多媒体处理模块适于:实时地对摄像模块采集的多路图片数据进行首次全景拼接以形成全景图像序列,对全景图像序列进行压缩编码,得到压缩编码后的视频流,并将压缩编码后的视频流通过第一传输模块推流到流媒体服务器端,以及将摄像模块采集到的多路图片数据中的部分或全部通过第一传输模块实时地发送给流媒体服务器端,其中,第一传输模块采用单工工作模式;流媒体服务器端适于从图像采集端实时接收压缩编码后的视频流以下发给对应的用户端,并保存从图像采集端接收的多路图片数据或保存基于接收的多路图片数据进行二次全景拼接而生成的多个二次全景拼接图像,当接收到来自用户端的请求拍照指令时,基于该请求拍照指令中包含的查找对象信息,以根据该查找对象信息所包含的待查找的全景图像帧的相关信息在已保存的多路图片数据或多个二次全景拼接图像中确定对应的多路图片数据或对应的二次全景拼接图像,将基于对应的多路图片数据进行二次全景拼接所得的二次全景拼接图像、或对应的二次全景拼接图像的局部或整体图像作为输出结果下发给对应的用户端。
其中,根据本公开实施例的基于单向通信的全景视频播放拍照系统可以用于全景视频的点播(录播或回放等)或直播。
图1示意性地示出了根据本公开实施例的基于单向通信的全景视频播放拍照系统的一种示例结构。
如图1所示,根据本公开实施例的基于单向通信的全景视频播放拍照系统包括图像采集端1、流媒体服务器端2以及一个或多个用户端3,其中,图像采集端1包括摄像模块11、多媒体处理模块12和第一传输模块13。
摄像模块11适于采集其视野内的多路图片数据。
根据本公开的实施例,摄像模块11例如可以包括多个摄像模组,多个摄像模组适于基于多个视角获取对应的视角图片,作为多路图片数据。其中,多个摄像模组例如可以包括鱼眼摄像头和广角摄像头中的至少一种。
在一个例子中,多个摄像模组例如包括多个鱼眼摄像头,比如,可以采用2个(或其他数量的)鱼眼摄像头来获取覆盖360度视角范围的两路图片数据(作为多路图片数据的示例)。
在另一个例子中,多个摄像模组例如包括多个广角摄像头,比如,可以采用8个(或其他数量的)广角摄像头来获取覆盖360度视角范围的8路图片数据(作为多路图片数据的示例)。
多媒体处理模块12适于执行以下处理:实时地对摄像模块11采集的多路图片数据进行首次全景拼接以形成全景图像序列;对全景图像序列进行压缩编码,得到压缩编码后的视频流,并将压缩编码后的视频流通过第一传输模块13推流到流媒体服务器端;以及将摄像模块11采集到的多路图片数据中的部分或全部通过第一传输模块13实时地发送给流媒体服务器端2。多媒体处理模块12例如可以采用以下任一种实现:开发板;CPU;微型处理器;微型计算机;等等。
其中,第一传输模块采用单工工作模式,也就是说,第一传输模块仅用于向流媒体服务器端2(如流媒体服务器端2的第二传输模块)发送数据,而不能从流媒体服务器端2接收数据。
流媒体服务器端2适于从图像采集端1实时接收压缩编码后的视频流以下发给对应的用户端3,并保存从图像采集端1接收的多路图片数据或保存基于接收的多路图片数据进行二次全景拼接而生成的多个二次全景拼接图像。
根据一个实现方式,当接收到来自用户端3的请求拍照指令时,流媒体服务器端2可以基于该请求拍照指令中包含的查找对象信息,根据该查找对象信息所包含的待查找的全景图像帧的相关信息在已保存的多路图片数据中确定对应的那组多路图片数据,将基于对应的多路图片数据进行二次全景拼接所得的二次全景拼接图像的局部或整体图像作为输出结果下发给对应的用户端3。
根据另一个实现方式,当接收到来自用户端3的请求拍照指令时,流媒体服务器端2可以基于该请求拍照指令中包含的查找对象信息,根据该查找对象信息所包含的待查找的全景图像帧的相关信息在已保存的多个二次全景拼接图像中确定对应的二次全景拼接图像(该多个二次全景拼接图像是在从采集端1接收到多路图片数据时实时地通过二次全景拼接获得的),将该对应的二次全景拼接图像的局部或整体图像作为输出结果下发给对应的用户端3。
上述“待查找的全景图像帧的相关信息”例如可以通过对用户端3的请求拍照指令中所包含的视频帧数据中的水印进行解码而获得。例如,用户端3的请求拍照指令中所包含的视频帧数据中包含一维码水印或二维码水印等,对该一维码水印或二维码水印进行解码得到的参数(如下文所描述的水印生成参数Iri)即可作为待查找的全景图像帧的相关信息。下文中将描述如何根据待查找的全景图像帧的相关信息来确定对应的多路图片数据或对应的二次全景拼接图像。
根据本公开的实施例,流媒体服务器端2例如包括存储模块26,存储模块26可以适于保存从图像采集端1接收的多路图片数据,以及保存根据时间就近原则建立的多路图片数据和全景图像序列之间的映射关系,也就是多路图片数据与视频流中各帧之间的对应关系。
根据本公开的实施例,存储模块26也可以适于保存基于接收的多路图片数据进行二次全景拼接(例如采用精准拼接算法)而生成的多个二次全景拼接图像,以及保存根据时间就近原则建立的多个二次全景拼接图像和全景图像序列之间的映射关系,也就是多个二次全景拼接图像与视频流中各帧之间的对应关系。存储模块26保存的多个二次全景拼接图像例如可以是通过下文描述的图片拼接模块22执行二次全景拼接而获得的。
根据本公开的实施例,全景图像序列例如包括多个帧序列,Ir表示该多个帧序列中的第r个帧序列,r为正整数,Irn表示第r个帧序列中的第n帧图像,n也为正整数。n例如可以等于帧率,即每秒帧数,比如25。
根据本公开的实施例,多路图片数据例如可以表示为Drn={D1,D2......,Dm},其中m表示摄像模组的数量,其为正整数,Drn表示第r个帧序列中的第n帧图像所对应的多路图片数据,多路图片数据和全景图像序列之间的映射关系可以表示为Irn→Drn,作为存储模块26所保存的多路图片数据和视频帧序列之间的映射关系。这样,在流媒体服务器端2得到待查找的全景图像帧的相关信息后,可以根据多路图片数据和全景图像序列之间的映射关系Irn→Drn(也就是说,该映射关系中采用每个全景图像帧的相关信息来表示对应的全景图像帧),确定与待查找的全景图像帧的相关信息所对应的那组多路图片数据。
根据本公开的实施例,例如可以用Ern表示利用Drn进行二次全景拼接所得的二次全景拼接图像,多个二次全景拼接图像和全景图像序列之间的映射关系可以表示为Irn→Ern,作为存储模块26所保存的多个二次全景拼接图像和视频帧序列之间的映射关系。这样,在流媒体服务器端2得到待查找的全景图像帧的相关信息后,可以根据多个二次全景拼接图像和全景图像序列之间的映射关系可以表示为Irn→Ern(也就是说,该映射关系中采用每个全景图像帧的相关信息来表示对应的全景图像帧),确定与待查找的全景图像帧的相关信息所对应的那个二次全景拼接图像。
图2示出了图1中的图像采集端1的可能结构的示意图。
如图2所示,图像采集端1中的多媒体处理模块12可以包括图片输入子模块121、图片拼接子模块122、图片缓存子模块123、图片输出子模块124、视频编码子模块125和视频输出子模块126中的任意一种或多种子模块。下文中将分别举例描述以上各个子模块所执行的处理和功能。
需要说明的是,在图2中,各个子模块121~126均采用虚线框表示,意图指示这些子模块并非是必选的,而是分别可选的。
图片输入子模块121例如可以实时接收摄像模块采集的多路图片数据,并同时传输多路图片数据至图片拼接子模块122和图片缓存子模块123。
图片拼接子模块122例如可以适于采用快速拼接算法对摄像模块11采集的多路图片数据进行首次全景拼接,以形成全景图像序列。其中,快速拼接算法例如可以采用现有快速拼接方法,这里不再详述。
根据一个实现方式,图片拼接子模块122所形成的全景图像序列例如为带标记的全景图像序列。其中,全景图像序列中的每一帧全景图像例如分别设有该帧对应的标记,标记例如可以是水印,比如,一维码水印或二维码水印等。
其中,带标记的全景图像序列例如可以通过视频编码子模块125获得。根据一个实现方式,视频编码子模块125可以按照如下方式来获得带标记的全景图像序列:
设定帧率f,视频流以每f帧为一个帧序列(f为正整数,例如f可为25),将视频按照播放的时间顺序划分为多个帧序列,用Ir表示第r个帧序列,r为正整数,r=1,2,...,比如I1表示第一个帧序列,I2表示第二个帧序列,等等。用Ir1,Ir2,......Irf表示第r个帧序列中的f帧图像,将“Iri”作为第r个帧序列中的第i帧图像的水印生成参数,其中,i∈{1,2,...,f},根据水印生成参数Iri得到对应的标记(比如根据Iri生成一个一维码或二维码水印),将该标记添加至对应的图像帧(也即第r个帧序列中的第i帧图像)上,由此获得带标记的各帧图像,以形成带标记的全景图像序列。
图片缓存子模块123例如可以保存若干时间内(如最近的预设时间段内)的多路图片数据。
需要说明的是,在其他例子中,在多媒体处理模块12不包括图片缓存子模块123的情况下,多媒体处理模块12不保存多路图片数据,这样,采集端1不需保存任何数据,可以使得采集端1的设备得到简化,而不需配置大内存来存储数据。
图片输出子模块124例如可以通过第一传输模块13将多路图片数据的部分或全部发送至流媒体服务器端2。
例如,图片输出子模块124可以按照预设频率进行传输,比如,每秒2组、5组等的多路图片数据。举例来说,设定帧率是25,若每秒传输2组多路图片数据,则图片输出子模块124在第0秒时传输D11(多路图片数据D11对应全景图像序列中第1个帧序列中的第1帧图像,即D11对应I11),在第0.5秒时传输D112(多路图片数据D112对应全景图像序列中第1个帧序列中的第12帧图像,即D112对应I112),在第1秒时传输D21(多路图片数据D21对应全景图像序列中第2个帧序列中的第1帧图像,即D21对应I21),在第1.5秒时传输D212(多路图片数据D212对应全景图像序列中第2个帧序列中的第12帧图像,即D212对应I212)……在第n秒时传输Dn1,在第n+0.5秒时传输Dn12;若每秒传输5组多路图片数据,则图片输出子模块在第0秒时传输D11(D11对应全景图像序列中第1个帧序列中的第1帧图像I11),在第0.2秒时传输D15(D15对应全景图像序列中第1个帧序列中的第5帧图像I15),在第0.4秒时传输D110(D110对应全景图像序列中第1个帧序列中的第10帧图像I110),在第0.6秒时传输D115(D115对应全景图像序列中第1个帧序列中的第15帧图像I115),在第0.8秒时传输D120(D120对应全景图像序列中第1个帧序列中的第20帧图像I120)……在第n秒时传输Dn1,在第n+0.2秒时传输Dn5,在第n+0.4秒时传输Dn10,在第n+0.6秒时传输Dn15,在第n+0.8秒时传输Dn20。
视频编码子模块125例如可以对全景图像序列(例如带标记的的全景图像序列)进行压缩编码。
视频输出子模块126例如可以利用视频传输协议将压缩编码后的视频流通过第一传输模块13推流到流媒体服务器端2。
图3示出了图1中的流媒体服务器端2的可能结构的示意图。
如图3所示,流媒体服务器端2例如可以包括视频处理模块21、图片拼接模块22、用户管理模块23、第二传输模块24、图片处理模块25和存储模块26中的任一种或多种模块。下文中将分别举例描述以上各个模块所执行的处理和功能。其中,存储模块26的功能和处理已在上文描述,下面将不再重复描述。
需要说明的是,在图3中,各个模块21~26均采用虚线框表示,意图指示这些模块并非是必选的,而是分别可选的。
根据一个实现方式,流媒体服务器端2例如包括视频处理模块21,视频处理模块21可以适于通过第二传输模块24实时接收图像采集端1传输的压缩编码后的视频流,基于压缩编码后的视频流获得待下发视频流以下发至对应的用户端3(如已建立连接的用户端3)。
在一个例子中,视频处理模块21可以将压缩编码后的视频流直接作为待下发视频流而传输至用户端。
在另一个例子中,视频处理模块21也可以按照预定方式将待下发视频流下发至用户端,例如,视频处理模块21可以将压缩编码后的视频流重新压缩编码成多个视频流,以将该多个视频流的至少部分发送给对应的用户端,其中,该多个视频流之间的分辨率互不相同。其中,“该多个视频流的至少部分”例如是其中部分视频流(如一个或几个),也可以是其中的全部。
举例来说,视频处理模块21可以将压缩编码后的视频流重新压缩编码成N种(N为正整数,N可以为1或大于1,比如3或5等)分辨率(或称清晰度)的视频流,如极速、标清、普清、高清、VIP超清,等等。根据用户等级(如用户是普通用户),可以为用户提供一种或多种可选的分辨率视频流,根据用户的选择来向其传输对应分辨率的视频流;如用户是VIP用户,当其选择VIP超清视频流时,则向其传输该清晰度(也即分辨率)的视频流。
图片拼接模块22例如可以采用精准拼接算法来完成二次全景拼接,以得到二次全景拼接图像。其中,精准拼接算法例如可以采用现有精准拼接算法,如光流拼接算法等。
在一个例子中,在存储模块26中存储的是多路图片数据的情况下,当流媒体服务器端2通过第二传输模块24接收到用户端3的请求拍照指令时,根据该指令在存储模块26中确定对应的一组多路图片数据,然后再通过图片拼接模块22进行二次全景拼接,得到对应的二次全景拼接图像。
在另一个例子中,在存储模块26中存储的是多个二次全景拼接图像的情况下,在流媒体服务器端2通过第二传输模块24实时地接收到来自图像采集端1的多路图片数据期间,便通过图片拼接模块22实时地对所接收的每组多路图片数据进行二次全景拼接,得到每组多路图片数据对应的二次全景拼接图像而保存在存储模块26中;而当流媒体服务器端2通过第二传输模块24接收到用户端3的请求拍照指令时,不再需要进行拼接,直接在存储模块26中查找对应的二次全景拼接图像即可。
根据一个实现方式,在流媒体服务器端2中保存的是接收到的多路图片数据的情况下,图片拼接模块22例如可以执行如下处理:当接收到来自一个或多个用户端3的至少一个请求拍照指令时,针对每个请求拍照指令,分别执行如下描述的步骤a1~a2。
在步骤a1中,根据该请求拍照指令中包含的视频帧数据确定待查找的全景图像帧的相关信息,然后执行步骤a2。
在步骤a2中,依据多路图片数据和全景图像序列之间的映射关系,在存储模块26保存的多路图片数据中查找与待查找的全景图像帧的相关信息对应的多路图片数据,作为查找结果,采用精准拼接算法对该查找结果中的多路图片数据进行二次全景拼接,得到对应的二次全景拼接图像。
此外,在执行完步骤a1和a2之后,图片处理模块25还可以执行步骤a3。在步骤a3中,图片处理模块25可以根据(对应的步骤a1中的)该请求拍照指令中所含的发送姿态在步骤a2得到的二次全景拼接图像中裁剪对应于该发送姿态的图片(局部图像),作为输出结果通过第二传输模块24下发给对应的用户端3。
根据另一个实现方式,在流媒体服务器端2中保存的是多个二次全景拼接图像的情况下,图片拼接模块22例如也可以执行如下处理:当接收到来自一个或多个用户端3的至少一个请求拍照指令时,针对每个请求拍照指令,分别执行如下描述的步骤b1~b2。
在步骤b1中,根据该请求拍照指令中包含的视频帧数据确定待查找的全景图像帧的相关信息,然后执行步骤b2。
在步骤b2中,依据多个二次全景拼接图像和全景图像序列之间的映射关系,在存储模块26保存的多个二次全景拼接图像中查找与待查找的全景图像帧的相关信息对应的二次全景拼接图像。
此外,在执行完步骤b1和b2之后,图片处理模块25还可以执行步骤b3。在步骤b3中,图片处理模块25可以根据(对应的步骤a1中的)该请求拍照指令中所含的发送姿态在步骤b2得到的二次全景拼接图像中裁剪对应于该发送姿态的图片(局部图像),作为输出结果通过第二传输模块24下发给对应的用户端3。
根据一个实现方式,图片拼接模块22例如可以通过解码视频帧数据中包含的水印而获得对应的待查找的全景图像帧的相关信息。
其中,待查找的全景图像帧的相关信息例如表示为Iri(即上文所描述的水印生成参数),其中,i为1~m中的正整数。
水印例如采用一维码水印或二维码水印等。
用户管理模块23例如可以将得到的输出结果保存在用户管理模块23中对应用户账号下,以供用户端预览和/或付费下载。
根据一个实现方式,图片处理模块25例如可以将二次全景拼接图像重新映射到一个球面上,该球面作为全景映射球面,根据用户端的设备的发送姿态确定用户视野的角度范围,根据用户视野的角度范围在全景映射球面上确定待裁剪球面图形,并裁下该待裁剪球面图形后映射成目标矩形图片,其中,该目标矩形图片的尺寸为预设值。该预设值可以根据经验值设定,或者可以根据用户设备发送的拍照指令中包含的屏幕尺寸参数来设定。
根据一个实现方式,图片处理模块25例如可以以二次全景拼接图像对应的平面矩形图片的侧边作为球面半圆弧来生成对应的全景映射球面,并将该平面矩形图片贴图到全景映射球面上,以完成将二次全景拼接图像映射到球面上。其中,平面矩形图片的侧边例如是平面矩形图片的较短的边。
根据一个实现方式,用户管理模块23可以适于接收来自每个用户端的身份认证请求,并基于该身份认证请求对对应的用户设备进行身份认证,在认证成功后向该对应的用户设备发送认证成功信息以与该用户设备建立数据连接。
根据本公开的实施例,第一传输模块13例如可以包括一个或多个传输组件。第一传输模块13例如可以采用有线传输和无线传输中的至少一种传输方式。
根据本公开的实施例,第二传输模块24例如可以包括一个或多个传输组件。第二传输模块24例如可以采用有线传输和无线传输中的至少一种传输方式。
根据本公开的实施例,第三传输模块34例如可以包括一个或多个传输组件。第三传输模块34例如可以采用有线传输和无线传输中的至少一种传输方式。
图4示出了用户端3对应的用户端设备的一种可能结构。如图4所示,每个用户端设备例如可以包括用户接入模块31、显示模块32、用户交互模块33和第三传输模块34中的任一种或多种模块。下文中将分别举例描述以上各个模块所执行的处理和功能。需要说明的是,在图4中,各个模块31~34均采用虚线框表示,意图指示这些模块并非是必选的,而是分别可选的。
其中,每个用户端3中例如可以设有用于发送各种请求的用户交互模块33,而用户端3中的第三传输模块34例如可以用于实现与流媒体服务器端2的第二传输模块24之间的数据传输等。
根据一个实现方式,每个用户端3例如可以向全景视频播放拍照系统中的流媒体服务器端2发送身份认证请求,并在接收到来自流媒体服务器端2的认证成功信息后与之建立数据连接。例如,在认证成功后,可以通过用户接入模块31建立与流媒体服务器端2之间的连接。
根据一个实现方式,每个用户端3例如可以在与流媒体服务器端2建立数据连接后,向流媒体服务器端2发送观看视频播放请求,并实时解码流媒体服务器端2分发来的视频数据。
根据一个实现方式,每个用户端3例如可以根据用户输入来在一种或多种分辨率的观看模式中选择一种来观看全景视频播放。
根据一个实现方式,每个用户端3例如可以在全景视频播放过程中根据用户输入来发送拍照请求,以获取高分辨率图片。其中,高分辨率图片例如是分辨率高于或等于预设阈值(例如4K)的图片,预设阈值例如可以根据经验值设定,或通过试验的方法确定,这里不再赘述。
其中,高分辨率图片例如是高于或等于预设图片分辨率的图片,预设图片分辨率例如根据经验值设定,或通过试验的方式获得。例如,首次全景拼接得到的首次全景图像序列中的图像分辨率是2880*1440,二次全景拼接得到的二次全景拼接图像的分辨率是4000*3000。应当理解的是,实际应用中,首次全景图像序列中的图像分辨率并不限于2880*1440,二次全景拼接图像的分辨率也不限于4000*3000,以上分辨率可以根据实际情况和需要而改变设置不同的数值,但需要使得二次全景拼接图像的分辨率高于首次全景图像序列中的图像分辨率。
根据一个实现方式,每个用户端3例如可以根据用户输入而向流媒体服务器端2发送预览请求,在向流媒体服务器端2允许该用户端3预览时,预览对应的照片。
根据一个实现方式,每个用户端3例如可以根据用户输入而向流媒体服务器端2发送付费下载请求,在向流媒体服务器端2允许该用户端3下载时,将对应的照片下载至本地。
其中,用户端3发送的拍照请求中例如包含视频帧数据和该用户端3对应的设备的发送姿态。视频帧数据例如包含水印,比如一维码或二维码水印。
例如,用户端3可以在确定要发送拍照请求时,获取该用户端3对应设备中显示模块32的屏幕法线方向或其屏幕背面法线方向,来作为其发送姿态。
又如,用户端3可以通过检测对应设备的触摸操作(如显示模块32可以为触摸屏,检测触摸屏上的触摸操作)来设置发送姿态,或通过对应设备中的姿态传感器(如陀螺仪等)来获取发送姿态。
优选实施例
下面结合5描述本公开的基于单向通信的全景视频播放拍照系统的一个优选实施例。需要说明的是,该图中的图像采集端和流媒体服务器端同样适用于上文所述的基于单向通信的全景视频播放拍照系统,这里不再赘述。
如图5所示,图像采集端包括摄像模块、多媒体处理模块和第一传输模块。摄像模块包括多个鱼眼或广角摄像头组成的摄像模组;多媒体处理模块包括一块嵌入式开发板或者一个微型计算机,它包括图片输入子模块、图片拼接子模块、图片缓存子模块、图片输出子模块、视频编码子模块和视频输出子模块;第一传输模块和流媒体服务器端实时单向通信,它包括一个或多个传输模块,可以采用有线传输,也可以采用无线传输。图像采集端通过第一传输模块推送视频流和发送图片数据。
流媒体服务器端包括视频处理模块、图片拼接模块、图片处理模块、存储模块、用户管理模块和第二传输模块。
用户终端(即用户端)包括一个或多个用户设备,每个用户设备包括用户接入模块、用户交互模块、显示模块和第三传输模块。其中,用户设备可以是智能手机、平板电脑或头戴式VR系统等终端设备。
图像采集端工作流程:
步骤一:摄像模块可以通过控制按键接收到采集指令后采集其视野内多路图片数据。摄像模块包括多个鱼眼或广角摄像头组成的摄像模组,多路图片数据即多个鱼眼或广角摄像头组成的摄像模组采集的多视角图片,多路图片数据可以用D={D1,D2……,Dm}表示,其中m表示摄像模组的数量,其为正整数。
步骤二:多媒体处理模块中图片输入子模块实时接收摄像模块采集的多路图片数据,并同时传输多路图片数据至图片拼接子模块和图片缓存子模块。
步骤三:多媒体处理模块中图片拼接子模块运用快速拼接算法实时拼接多路图片数据完成全景拼接并形成带标记的全景图像序列,然后传输带标记的全景图像序列至视频编码子模块。
带标记的全景图像序列可以这样形成:若设定帧率是25,则视频流以25帧为一个帧序列,将视频按照播放的时间顺序划分为若干个帧序列,用Ir表示第r个帧序列,Ir1,Ir2,......Ir25表示第r个帧序列中的25帧图像,将Irn作为水印生成参数,即第r个帧序列中的第n帧图像,在每个帧序列的每一帧图像上添加一维码或二维码水印。
步骤四:多媒体处理模块中视频编码子模块对带标记的全景图像序列进行压缩编码。
步骤五:多媒体处理模块中视频输出子模块利用视频传输协议将压缩编码后的视频流通过第一传输模块推流到流媒体服务器端。
步骤六:多媒体处理模块中图片缓存子模块保存若干时间内的多路图片数据。
例如,设定帧率是25,带标记的全景图像序列用Irn表示,多路图片数据用Drn={D1,D2……,Dm}表示,其中m表示摄像模组的数量,其为正整数,Drn表示第r个帧序列中的第n帧图像所对应的多路图片数据。
步骤七:图片输出子模块通过第一传输模块传输多路图片数据至流媒体服务器端。
流媒体服务器端包括视频处理模块、图片拼接模块、图片处理模块、存储模块、用户管理模块和第二传输模块。
用户管理模块用于接收来自每个用户设备的身份认证请求,并基于该身份认证请求对对应的用户设备进行身份认证,在认证成功后向该对应的用户设备发送认证成功信息以与该用户设备建立数据连接。视频处理模块通过第二传输模块实时接收图像采集端传输的视频流,并将视频流按照一定规则分发;也可以将视频流重新压缩编码成若干不同分辨率的视频流,并将视频流按照一定规则分发。
图片拼接模块运用精准拼接算法二实现多路图片的全景拼接。存储模块用于保存多路图片或全景图片,并根据时间就近原则建立并保存多路图片或全景图片和视频帧序列之间的映射关系。图片拼接模块用于处理用户终端请求拍照的指令。
流媒体服务器端处理用户终端请求拍照的步骤:
当流媒体服务器端接收到来自用户终端一个或多个用户设备的至少一个请求拍照的指令时,(步骤101)首先根据用户设备发送的请求拍照指令中包含的视频帧数据查找当前帧,方法:视频帧数据包含一维码或二维码水印,解码一维码或二维码根据Irn查找当前帧;(步骤102)然后分为两种实施方法查找当前帧对应的全景图片:
第一种方法:当图片拼接模块接收到图像采集端传输的多路图片数据立即完成全景拼接并将全景图片保存在存储模块里形成全景图片库,并根据时间就近原则建立并保存全景图片和视频帧序列之间的映射关系,根据该映射关系查找存储模块中当前帧对应的全景图片,以帧率25、图像采集端每秒传输2组多路图片数据为例,用户终端在视频播放第1.2秒按下拍照键,所查找的全景图片是视频播放第1秒时图像采集端所传输的多路图片拼接后的全景图片;用户终端在视频播放第5.8秒按下拍照键,所查找的全景图片是视频播放第5.5秒时图像采集端所传输的多路图片拼接后的全景图片。
第二种方法:存储模块接收到图像采集端传输的多路图片数据立即保存,并根据时间就近原则建立并保存多路图片和视频帧序列之间的映射关系,根据该映射关系查找存储模块中当前帧对应的多路图片,以帧率25、图像采集端每秒传输2组多路图片数据为例,用户终端在视频播放第1.2秒按下拍照键,所查找的多路图片是视频播放第1秒时图像采集端所传输的多路图片;用户终端在视频播放第5.8秒按下拍照键,所查找的多路图片是视频播放第5.5秒时图像采集端所传输的多路图片;然后调用图片拼接模块完成全景拼接,拼接后的全景图片可以保存在存储模块里形成全景图片库,也可以不保存。
(步骤103)然后根据用户终端的发送姿态在该全景图片中裁剪对应该姿态的图片。裁剪图片步骤如下:(步骤201)将该全景图片(平面矩形图片)重新映射到一个球面上,即以平面矩形图片的侧边作为球面半圆弧生成对应的全景映射球面,并将平面矩形图片贴图到全景映射球面上;(步骤202)根据用户设备的发送姿态确定用户视野的角度范围;(步骤203)根据用户视野的角度范围在全景映射球面上查找待裁剪球面图形;(步骤204)将该已裁剪球面图形映射成目标矩形图片,该目标矩形图片的尺寸为预设值,该预设值可以根据经验值设定,或者可以根据用户设备发送的拍照指令中包含的屏幕尺寸参数来设定。
(步骤104)最后将已裁剪的图片保存到用户管理模块中该用户账号下,以用于用户终端最终的预览和付费下载.
需要说明的是,第二传输模块可以是一个传输模块,也可以是多个,可以采用有线传输,也可以采用无线传输。快速拼接算法一和精准拼接算法二区别在于,快速拼接算法一的算法需要实时快速完成全景图片拼接,以满足视频播放的流畅性;而精准拼接算法二的算法主要侧重于精准无缝高质量的全景图片拼接,以满足用户终端在观看视频播放过程中获取高分辨率图片的需求。
用户终端工作流程:
步骤一:用户终端向流媒体服务器端发送身份认证请求,并在接收到来自流媒体服务器端的认证成功信息后与流媒体服务器端建立数据连接。
步骤二:用户终端接入系统后向流媒体服务器端发送观看视频播放请求,实时解码流媒体服务器端分发过来的视频数据,选择不同分辨率的观看模式来观看全景视频播放。
步骤三:用户终端在观看全景视频过程中可以发送拍照请求,以获取高分辨率图片。
步骤四:用户终端可以发送预览请求,预览自己拍的照片;也可以发送付费下载请求,将自己拍的照片下载至本地。
其中,用户终端通过用户交互模块发送请求。用户终端设备发送的拍照请求中包含视频帧数据和发送姿态,发送姿态是指用户设备在发送该请求时的姿态,可以是用户设备中显示模块的屏幕法线方向或其屏幕背面法线方向;可以由用户通过触屏操作的方式来设置发送姿态,也可以在用户交互模块中集成陀螺仪等姿态传感子模块,以此来获取用户设备的当前姿态。
综上,在根据本公开的实施例中,本公开提供了如下方案,但不限于此:
方案1、基于单向通信的全景视频播放拍照系统,其特征在于包括图像采集端1、流媒体服务器端2以及一个或多个用户端3;所述图像采集端1包括摄像模块11、多媒体处理模块12和第一传输模块13;
所述摄像模块11适于采集其视野内的多路图片数据;
所述多媒体处理模块12适于:
实时地对所述摄像模块11采集的多路图片数据进行首次全景拼接以形成全景图像序列,
对所述全景图像序列进行压缩编码,得到压缩编码后的视频流,并将压缩编码后的视频流通过所述第一传输模块13推流到流媒体服务器端,以及
将所述摄像模块11采集到的多路图片数据中的部分或全部通过所述第一传输模块13实时地发送给所述流媒体服务器端2,其中,所述第一传输模块13采用单工工作模式;
所述流媒体服务器端2适于从所述图像采集端1实时接收所述压缩编码后的视频流以下发给对应的用户端3,并保存从图像采集端1接收的多路图片数据或保存基于接收的多路图片数据进行二次全景拼接而生成的多个二次全景拼接图像,当接收到来自用户端3的请求拍照指令时,基于该请求拍照指令中包含的查找对象信息,以根据该查找对象信息所包含的待查找的全景图像帧的相关信息在已保存的多路图片数据或多个二次全景拼接图像中确定对应的多路图片数据或对应的二次全景拼接图像,将基于所述对应的多路图片数据进行二次全景拼接所得的二次全景拼接图像、或所述对应的二次全景拼接图像的局部或整体图像作为输出结果下发给对应的用户端3。
方案2、根据方案1所述的全景视频播放拍照系统,其特征在于,所述流媒体服务器端2包括图片处理模块25,所述图片处理模块25适于根据用户端3的请求拍照指令进行对应的处理。
方案3、根据方案2所述的全景视频播放拍照系统,其特征在于,所述图片处理模块25适于根据用户端3的请求拍照指令确定所述用户端3的发送姿态,以根据所述用户端3的发送姿态在对应的二次全景拼接图像中或者基于所述对应的多路图片数据进行二次全景拼接所得的二次全景拼接图像中裁剪出对应该发送姿态的局部图像,作为输出结果下发给所述用户端3。
方案4、根据方案1-3中任一项所述的全景视频播放拍照系统,其特征在于,所述多媒体处理模块12包括图片拼接子模块122,
所述图片拼接子模块122适于采用快速拼接算法对所述摄像模块11采集的多路图片数据进行首次全景拼接,以形成全景图像序列。
方案5、根据方案1-4中任一项所述的全景视频播放拍照系统,其特征在于,所述流媒体服务器端2包括图片拼接模块22,所述图片拼接模块22适于采用精准拼接算法来完成所述二次全景拼接处理。
方案6、根据方案1-5中任一项所述的全景视频播放拍照系统,其特征在于,所述流媒体服务器端2保存的多路图片数据或多个二次全景拼接图像是最近预设时间段内保存的。
方案7、根据方案1-6中任一项所述的全景视频播放拍照系统,其特征在于,所述摄像模块11包括多个摄像模组,所述多个摄像模组适于基于多个视角获取对应的视角图片,作为所述多路图片数据。
方案8、根据方案1-7中任一项所述的全景视频播放拍照系统,其特征在于,所述流媒体服务器端2包括存储模块26,所述存储模块26适于保存从图像采集端1接收的多路图片数据,以及保存根据时间就近原则建立的多路图片数据和全景图像序列之间的映射关系。
方案9、根据方案1-7中任一项所述的全景视频播放拍照系统,其特征在于,所述流媒体服务器端2包括存储模块26,所述存储模块26适于保存基于接收的多路图片数据进行二次全景拼接而生成的多个二次全景拼接图像,以及保存根据时间就近原则建立的多个二次全景拼接图像和全景图像序列之间的映射关系。
方案10、根据方案8所述的全景视频播放拍照系统,其特征在于,
所述全景图像序列包括多个帧序列,Ir表示该多个帧序列中的第r个帧序列,r为正整数,Irn表示第r个帧序列中的第n帧图像;
多路图片数据表示为Drn={D1,D2......,Dm},其中m表示摄像模组的数量,其为正整数,Drn表示第r个帧序列中的第n帧图像所对应的多路图片数据,多路图片数据和全景图像序列之间的映射关系表示为Irn→Drn,作为所述多路图片数据和视频帧序列之间的映射关系。
方案11、根据方案9所述的全景视频播放拍照系统,其特征在于,
所述全景图像序列包括多个帧序列,Ir表示该多个帧序列中的第r个帧序列,r为正整数,Irn表示第r个帧序列中的第n帧图像;
多路图片数据表示为Drn={D1,D2......,Dm},其中m表示摄像模组的数量,其为正整数,Drn表示第r个帧序列中的第n帧图像所对应的多路图片数据,用Ern表示利用Drn进行二次全景拼接所得的二次全景拼接图像,多个二次全景拼接图像和全景图像序列之间的映射关系表示为Irn→Ern,作为多个二次全景拼接图像和视频帧序列之间的映射关系。
方案12、根据方案7所述的全景视频播放拍照系统,其特征在于,所述多个摄像模组包括鱼眼摄像头和广角摄像头中的至少一种。
方案13、根据方案4所述的全景视频播放拍照系统,其特征在于,所述全景图像序列为带标记的全景图像序列。
方案14、根据方案13所述的全景视频播放拍照系统,其特征在于,所述视频编码子模块125适于:
设定帧率f,视频流以每f帧为一个帧序列,将视频按照播放的时间顺序划分为多个帧序列,用Ir表示第r个帧序列,r为正整数,r=1,2,...;用Ir1,Ir2,......Irf表示第r个帧序列中的f帧图像,将Iri作为第r个帧序列中的第i帧图像的水印生成参数,其中,i∈{1,2,...,f},根据水印生成参数Iri得到对应的标记,将该标记添加至对应的图像帧上,获得带标记的各帧图像,以形成带标记的全景图像序列。
方案15、根据方案1-14中任一项所述的全景视频播放拍照系统,其特征在于,所述流媒体服务器端2包括用户管理模块23,
所述用户管理模块23适于接收来自每个用户端的身份认证请求,并基于该身份认证请求对对应的用户设备进行身份认证,在认证成功后向该对应的用户设备发送认证成功信息以与该用户设备建立数据连接。
方案16、根据方案1-15中任一项所述的全景视频播放拍照系统,其特征在于,所述流媒体服务器端2包括视频处理模块21,
所述视频处理模块21适于通过所述第二传输模块24实时接收所述图像采集端1传输的压缩编码后的视频流,基于所述压缩编码后的视频流获得待下发视频流以下发至用户端3。
方案17、根据方案16所述的全景视频播放拍照系统,其特征在于,所述视频处理模块21适于按照预定方式将待下发视频流下发至用户端3。
方案18、根据方案17所述的全景视频播放拍照系统,其特征在于,所述视频处理模块21适于将所述压缩编码后的视频流重新压缩编码成多个视频流,以将该多个视频流的至少部分发送给对应的用户3,其中,该多个视频流之间的分辨率互不相同。
方案19、根据方案5所述的全景视频播放拍照系统,其特征在于,所述图片拼接模块22适于
当接收到来自一个或多个用户端3的至少一个请求拍照指令时,针对每个请求拍照指令,
根据该请求拍照指令中包含的视频帧数据确定待查找的全景图像帧的相关信息,
依据多路图片数据和全景图像序列之间的映射关系,在存储模块26保存的多路图片数据中查找与待查找的全景图像帧的相关信息对应的多路图片数据,作为查找结果,采用精准拼接算法对该查找结果中的多路图片数据进行二次全景拼接,得到二次全景拼接图像。
方案20、根据方案5所述的全景视频播放拍照系统,其特征在于,所述图片拼接模块22适于
当接收到来自一个或多个用户端3的至少一个请求拍照指令时,针对每个请求拍照指令,
根据该请求拍照指令中包含的视频帧数据确定待查找的全景图像帧的相关信息,
依据多个二次全景拼接图像和全景图像序列之间的映射关系,在存储模块26保存的多个二次全景拼接图像中查找与待查找的全景图像帧的相关信息对应的二次全景拼接图像。
方案21、根据方案19或20所述的全景视频播放拍照系统,其特征在于,所述图片拼接模块22适于通过解码所述视频帧数据中包含的水印而获得对应的待查找的全景图像帧的相关信息。
方案22、根据方案21所述的全景视频播放拍照系统,其特征在于,所述待查找的全景图像帧的相关信息表示为Iri,其中,i为1~m中的正整数。
方案23、根据方案21或22所述的全景视频播放拍照系统,其特征在于,所述水印采用一维码水印或二维码水印。
方案24、根据方案19-23中任一项所述的全景视频播放拍照系统,其特征在于,所述用户管理模块23适于将得到的输出结果保存在所述用户管理模块23中对应用户账号下,以供用户端预览和/或付费下载。
方案25、根据方案19-23中任一项所述的全景视频播放拍照系统,其特征在于,所述图片处理模块25适于:
将所述二次全景拼接图像重新映射到一个球面上,该球面作为全景映射球面,
根据用户端3的设备的发送姿态确定用户视野的角度范围,
根据用户视野的角度范围在所述全景映射球面上确定待裁剪球面图形,并裁下该待裁剪球面图形后映射成目标矩形图片,其中,该目标矩形图片的尺寸为预设值。
方案26、根据方案25所述的全景视频播放拍照系统,其特征在于,所述图片处理模块25适于:
以所述二次全景拼接图像对应的平面矩形图片的侧边作为球面半圆弧来生成对应的全景映射球面,并将该平面矩形图片贴图到全景映射球面上,以完成将所述二次全景拼接图像映射到所述球面上。
方案27、根据方案1-26中任一项所述的全景视频播放拍照系统,其特征在于,所述第一传输模块13、所述第二传输模块24和所述第三传输模块34中的每一个传输模块分别包括一个或多个传输组件。
方案28、根据方案27所述的全景视频播放拍照系统,其特征在于,所述第一传输模块13、所述第二传输模块24和所述第三传输模块34中的每一个传输模块采用有线传输和无线传输中的至少一种传输方式。
方案29、根据方案1-28中任一项所述的全景视频播放拍照系统,其特征在于,所述用户端3适于向所述全景视频播放拍照系统中的流媒体服务器端2发送身份认证请求,并在接收到来自流媒体服务器端2的认证成功信息后与之建立数据连接。
方案30、根据方案29所述的全景视频播放拍照系统,其特征在于,所述用户端3适于在与所述流媒体服务器端2建立数据连接后,向流媒体服务器端2发送观看视频播放请求,并实时解码所述流媒体服务器端2分发来的视频数据。
方案31、根据方案1-30中任一项所述的全景视频播放拍照系统,其特征在于,所述用户端3适于根据用户输入来在一种或多种分辨率的观看模式中选择一种来进行全景视频播放。
方案32、根据方案1-31中任一项所述的全景视频播放拍照系统,其特征在于,所述用户端3适于在全景视频播放过程中根据用户输入来发送拍照请求,以获取高分辨率图片。
方案33、根据方案1-32中任一项所述的全景视频播放拍照系统,其特征在于,所述用户端3适于根据用户输入而向流媒体服务器端2发送预览请求,在向流媒体服务器端2允许该用户端3预览时,预览对应的照片。
方案34、根据方案1-33中任一项所述的全景视频播放拍照系统,其特征在于,所述用户端3适于根据用户输入而向流媒体服务器端2发送付费下载请求,在向流媒体服务器端2允许该用户端3下载时,将对应的照片下载至本地。
方案35、根据方案34所述的全景视频播放拍照系统,其特征在于,所述用户端3发送的拍照请求中包含视频帧数据和该用户端3对应的设备的发送姿态。
方案36、根据方案35所述的全景视频播放拍照系统,其特征在于,所述用户端3适于在确定要发送拍照请求时,获取该用户端3对应设备中显示模块的屏幕法线方向或其屏幕背面法线方向,来作为其发送姿态。
方案37、根据方案35或36所述的全景视频播放拍照系统,其特征在于,所述用户端3适于通过检测对应设备的触摸操作来设置发送姿态,或通过对应设备中的姿态传感器来获取发送姿态。
方案38、根据方案1-37中任一项所述的全景视频播放拍照系统,其特征在于,所述用户端3中设有用于发送各种请求的用户交互模块。
方案39、根据方案1-38中任一项所述的全景视频播放拍照系统,其特征在于,全景视频播放拍照系统用于全景视频直播。
最后,还需要说明的是,在本公开中,诸如左和右、第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
尽管上面已经通过本公开的具体实施例的描述对本公开进行了披露,但是,应该理解,本领域技术人员可在所附权利要求的精神和范围内设计对本公开的各种修改、改进或者等同物。这些修改、改进或者等同物也应当被认为包括在本公开所要求保护的范围内。