MPEG4标准协议中。
VOL头中的Vop_time_increment_resolution和VOP头中的Vop_time_increment,一起确定了码流所采用的帧率。
VOL头中的Vop_time_increment_resolution,指示了vop_time_increment 的时间分辨率。它的值实际上就表示了1 秒被分成多少间隔。
VOP头中的Vop_time_increment,单位为vol 中定义的1/vop_time_increment_resolution 秒,它给出当前vop 的以modulo_time_base 为基准的精确时间。它的取值范围为[0,vop_time_increment_resolution]。
简单计算,码流的实时帧率应该等于Vop_time_increment_resolution/(每个Vop_time_increment的差值)。
VOL中的fixed_vop_rate,表示所有VOP是否采用固定的帧率编码。只有当任意两个连续的vop 显示间隔是常数时,它才被设置为1。
Fixed_vop_time_increment:这个码字描述了显示序列中两个vop 之间的时间长度,单位由vop_time_increment_resolution 决定, 等于它的倒数。
在这种情况下,码流的固定帧率由vop_time_increment_resolution/fixed_vop_time_increment给出。
对于VOP中的modulo_time_base,它由一个0 和后面紧跟着的若干个1 组成,每个1 表示1秒。每过1s,0后面多1个1。
GOV头中的时间显示以此为基准。
以下是标准中的例子。
存在VLC接收码流时,帧率显示与实际帧率不一致的情况。
使用ElecardStreamEye分析帧率30的码流,使用VLC接收却是60或30000。
应该是因为VLC在解码时,只关心vop_time_increment_resolution的值,而没有关心vop_time_increment的值。
在实际应用中还存在这样的问题:
设置的帧率是25帧,GOV中的时间也是按照25帧1秒来计算。
但vop_time_increment_resolution和vop_time_increment的增量分别是60和2,等于是30帧,实际码率也是按照30帧来控制。
这样需要从编码入手进行修改。