H264—重要参数:时间戳、量化参数QP、档次Profile、级别Level

1、时间戳rtp_timestamp:

https://blog.csdn.net/jasonhwang/article/details/7316128

1
2
3
4
5
6
7
8
9
RTP timestamp是用时钟频率(clock rate)计算而来表示时间的。
timestamp表示每帧的时间标签

RTP传输中如何判断两包是不是同一帧:
    1、通过每帧最后一个RTP的marker标志区别帧
    2、最可靠的方法是查看相同RTP timestamp包为同一帧。

两帧之间RTP timestamp的增量 = 时钟频率 / 帧率
        其中时钟频率可从SDP中获取,

SDP消息格式
m=video 2834 RTP/AVP 96
a=rtpmap:96 H264/90000
通常视频时钟频率为90000、通常音频的时钟频率一般为8000。
若视频帧率为25fps,则相邻帧间RTP timestamp增量值 = 90000/25 = 3600。
RTSP回放时如何通过RTP的timestamp计算npt时间

2、量化参数QP----量化步长Qstep

【QP值对应量化步长】,对于亮度而言,此值范围为int=0~51 。QP值越小,量化步长Qstep越小,量化的精度就越高,意味着同样画质的情况下,产生的数据量可能会更大。

0、QP值每增加6,量化步长就增加一倍。
1、 量化参数QP是量化步长Qstep的序号。
2、对于亮度(Luma)编码,量化步长Qstep共有52个值,QP取值0-51
3、对于色度(Chroma)编码,QP的取值0-39。

现有的码率控制算法主要是通过【调整离散余弦变换的量化参数大小输出目标码率】。实际上,量化参数(QP)反映了空间细节压缩情况,如QP小,大部分的细节都会被保留;QP增大,一些细节丢失,码率降低,但图像失真加强和质量下降。也就是说,QP和比特率(每秒传输的比特数bit)成反比的关系,而且随着视频源复杂度的提高,这种反比关系会更明显
在这里插入图片描述

量化是在不降低视觉效果的前提下减少图像编码长度,减少视觉恢复中不必要的信息。H264采用标量量化技术,它将每个图像样点编码映射成较小的数值。一般标量量化器的原理为:FQ = round(y/Qstep)。其中,y为输入样本点编码,Qstep为量化步长,FQ为y的量化值。其相反过程即反量化为:y’ = FQ ·Qstep。

1)Round(x)函数
其功能采用“银行家舍入”算法,即四舍五入取偶。详细地说是这样,四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一。

2)在YUV中,“Y”代表明亮度(Luminance或Luma),也就是灰阶值; 而“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述图像色彩及饱和度,用于指定像素的颜色。

2、min qp 最小量化步长

说明:设置x264可以使用的最小量化器。量化参数越小,输出越接近输入。使用某些值时,x264的输出可以和输入看起来完全一样,虽然其实并不是精确相同的,通常就够了没有必要使用更多比特在宏块上了。如果开启了自适应量化器(默认开启),则不鼓励提高qpmin的值,那样可能会降低帧的平坦部分的质量。

3、max qp最大量化步长

说明:qpmin的反面,设置x264可以使用的最大量化器。默认值51是H.264标准中的最大值,质量非常低。默认值51其实相当于没有设置qpmax。如果你想控制x264输出的最低品质,也许你想要把这个值调低一点(调到30-40最低了),但一般而言不推荐调节这个值。

3、SPS中的参数:档次(Profile)、级别(Level)

①Profile:档次: 主要规定编码器可采用哪些【编码工具或算法】。
  对视频压缩特性的描述(CABAC呀、颜色采样数等等)Baseline/Main/High Profile。
----------- profile_idc:
标识当前H.264码流的profile。
H.264中定义了三种常用的档次profile:-----对应编码工具的集合
基准档次:baseline profile; 66
主要档次:main profile; 77
扩展档次:extended profile; 88
   Profile越高,就说明采用了越高级的压缩特性。
在新版的标准中,还包括了High、High 10、High 4:2:2、High 4:4:4、High 10 Intra、High 4:2:2 Intra、High 4:4:4 Intra、CAVLC 4:4:4 Intra等,每一种都由不同的profile_idc表示。
另外,constraint_set0_flag ~ constraint_set5_flag是在编码的档次方面对码流增加的其他一些额外限制性条件。

②Level:
  根据解码端的负载和存储空间情况对关键参数【最大采样率、最大图像尺寸、分辨率、最小压缩比、最大比特率、解码缓冲区DPB大小等】加以限制。
//https://blog.csdn.net/xiaojun111111/article/details/52090185
   Level越高,视频的码率、分辨率、fps越高。
--------------------------level_idc
标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。
当前码流中,level_idc = 0x1e = 30,因此码流的级别为3。

序列GOP = 1sps+1pps+1sei+1I帧+若干p帧(B帧)

h265比h264还多一个vps

1
2
3
CBR和VBR下P帧的大小策略会不同,
    CBR(Constants BitRate即静态码率 尽量保障码率率)时P帧大小基本恒定,
    VBR(Variable Bitrate动态码率 尽量保障清晰度波动小)时变化会比较剧烈
1、DTS和PTS
1
2
3
4
5
DTS:即解码顺序
  解码时各帧按照其自身DTS传输至解码器
PTS:即输出&显示(渲染)顺序
  解码后按照各帧的PTS从解码器输出
//在没有B帧时,DTS和PTS的顺序是一样的。

在这里插入图片描述