1. 前言
为左眼和右眼携带立体视频视图的能力产生了更丰富的用户体验。 立体视频(有时称为“3D 视频”)向用户的左眼呈现一个图像,向用户的右眼呈现另一幅图像(通常是相关的)以产生立体效果,定义为:大脑接收双眼视觉刺激而产生的深度知觉; 双眼视觉。
如下图,左眼一幅图,右眼一幅图,同时播放在加上apple眼镜的渲染,就形成3D效果。
Apple的立体视频也是以上的模式,这里介绍Apple定义的HEVC在mp4中的3D视觉如何构造格式box和其特点。
主视觉可以是左眼,也可以是右眼。下面为了方便叙述,左眼为主视觉,右眼为子视觉。
1.1 Apple HEVC Nalu
HEVC NALU头:
+---------------+---------------+
|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|F| Type | LayerId | TID |
+---------------+---------------+
F: forbid,如果使能,该nalu就无效,一般f都为0;
type: nalu类型
layerId: 空间层,常规都是0,但是在apple hevc stereo中,主视觉layerId=0, 子视觉layerId=1
tid: 时间层
两个连续nalu的例子:
video data dts:50, pts:133, len: 2280, hevc header:{"forbid":0,"nalu_type":1,"layer_id":0,"tid":1}
video data dts:50, pts:133, len: 1981, hevc header:{"forbid":0,"nalu_type":1,"layer_id":1,"tid":1}
如上:
主视觉,dts=50,layer_id=0
子视觉,dts=50,layer_id=1
两个nalu的dts和pts一样,通过layer_id的不一样,来标识主视觉和子视觉。
注意: 通过layer_id的不同来标识主视觉和子视觉,这样能实现播放器的前后兼容。
新播放器(支持apple hevc stereo, vision pro),能通过layerId=0和1,来识别主视觉和子视觉;
旧播放器(不支持apple hevc stereo),只能识别layerId=0,只能识别主视觉,也就是当作普通的视频来播放,从而实现前后兼容。