常见的vr视频大部分都是基于柱面(或者称为球面)的,比如:
其原理和地球仪展开是一样的,越接近南北极柱面展开的图像畸变越大:
从codec的角度看,这种视频其实很不适合编码,因为当畸变区域较大的地方出现运动,运动估计效果是很不好的。毕竟现在所有的codec在me方面都是以平移为最佳,这种引入很多形变的vr视频不仅不利于压缩,其中很多内容也是冗余的。
如何可以更好的处理呢?facebook提出了两种比较简单的变换方法,一种是六面体,一种是四棱锥。前者的变换是开源的。
我们先看看六面体变换出来的效果:
转换成六面体以后,面积减少了25%。而且更关键的是,每个正方形的内容畸变程度都大大减小。实际编码过程中,对codec而言会好很多,实际测试中码率可以降50%甚至更多。
我们再看看四棱锥,由于facebook没有公开源码,以下是我以自己的理解根据正四棱锥的中心点为观测点做的:
以正四棱锥的方式,可以减少80%的数据量。然而代价也是非常明显的,那就是除了正面以外,其他内容分辨率会非常不好。另外一个缺点是正面以外的四个三角形内容畸变不利于编码。该方案目的就是保证正面清晰,牺牲其他方向的清晰度。正棱锥可以配合hls等方案一次推多个方向的流,比如前后左右上下,每一个流的码率都比较低,从而保证传输的实时性,解码器根据不同方向来读取不同流。这种方案缺点也比较明显,那就是切换的时候由于idr帧会有延迟,经常切换会导致很不好的体验。