H264(9)---------h264面试题

为什么要有YUV这种数据出来?(YUV相比RGB来说的优点)

1yuv除了yuv444外,其他格式比如yuv422 yuv420 yuv411都要比rgb格式占的空间下。

Yuv444 rgb占的空间一样大。

Yuv422  = y + u+ v = y + y/2 + y/2 = 2y,rgb1/3

Yuv420  = y + u + v = y + y/2/2 + y /2/2 = 1.5y ,rgb 1/2

Yuv411 = y + u + v = y +  1/4y + 1/4y = 1.5y ,rgb 1/2

2、YUV(也称YCbCr):Y标识明亮度,UV的作用是描述影像色彩及饱和度

Y是灰白

U绿色分量

V 红色分量

老的黑白电视机的数据只有一个Y分量,等到彩色电视剧出现的时候加入UV分量。

 

H264/H265有什么区别?

宏块个数爆发式增加,宏块内容复杂度降低,运动失量大幅度增加。所以就诞生了H265.

H264宏块是16x16的,H265宏块会根据宏块的变化幅度来进行宏块划分。而H265的编码单位可以选择从最小的8x8到最大的64x64。

H265压缩率相对于H264压缩率理论上要少百分之50;

 

 

平常电视的帧率一般多少?30帧?高清一般需要60帧?

平常电视、动画是25帧/s,游戏是30帧/s。高清是清晰度,超过720p就是高清了。帧率和平滑度有关。

 

 

 

SPS有什么作用?

1、通过profile 我们知道视频的压缩级别,支持的特性

2、通过level 我们知道视频可以支持的分辨率和比特率

3、我们可以通过pic_width_in_mbs_minus1 ,pic_heigh_in_mbs_minus1计算出视频的宽带和高度

4、frame _mbs_only_flag 明白是场编码那个是帧编码

5、log2_max_frame_num_minus4 获取得到GOP最大的帧数

6、max_num_ref_frames 获取参考帧的帧数

7、pic_order_cnt_type 计算帧的序号

8、可以计算得出帧率

 

PPS有什么作用?

指定熵编码,图片的分片(通常每张图像是一片),是否开启权重预测

 

 

 

Slice Header 有什么作用?

定义了解码顺序,当前slice中包含的第一个宏块在整帧中的位置;分片的量化器的值。

pic_parameter_set_id:当前slice所依赖的pps的id;

colour_plane_id:当标识位separate_colour_plane_flag为true时,colour_plane_id表示当前的颜色分量,0、1、2分别表示Y、U、V分量。

field_pic_flag:场编码标识位。当该标识位为1时表示当前slice按照场进行编码;该标识位为0时表示当前slice按照帧进行编码。

bottom_field_flag:底场标识位。该标志位为1表示当前slice是某一帧的底场;为0表示当前slice为某一帧的顶场。

idr_pic_id:表示IDR帧的序号。某一个IDR帧所属的所有slice,其idr_pic_id应保持一致。该值的取值范围为[0,65535]。

pic_order_cnt_lsb:表示当前帧序号的另一种计量方式。

delta_pic_order_cnt_bottom:表示顶场与底场POC差值的计算方法,不存在则默认为0;

 

H264的编解码框架?

 编码:

档案帧Fn如果是I帧,那么就会选择帧内预测(Intra prediction),然后再生成和原始数据的残差值。经过变换,量化,重排序,熵编码形成所需要的数据。

当前帧如果是P B 帧,和参考帧进行对比,经过Me(宏匹配)运动估计,然后再加上MC运动补偿然后再加上残差值,在进行变化,量化,重排序和熵编码形成所需要的数据。

 

解码

先经过熵编码的解压缩,再进行排序,逆量化,逆变换后,将残差值和预测值叠加形成没有滤波的帧,再经过滤波器重构出输出图像。

 

 

H264的码流结构?

 

 

H264当中是一个一个NALU单元。

NALU包含一个NALU Header和一个NALU Body

NALU Header是一个字节,第一位是禁止位,第二三位是重要性标志位,数值越大越重要,第三到七位是NALU类型。

NALU Body中是RBSP数据,RBSB 是按字节算的,SODB是原始bit数据,按位存储。为了便于后续处理,所以就在SODB后加上一个1,多个0。让数据按字节对齐形成了RBSP。

SODB分为Slice Header Slice Data。

SliceData当中存的是一个一个宏块。每个宏块又包含宏块类型,宏块预测,残差值。

 

什么是PPI 什么DPI?

PPI 每英存上拥有的像素数

DPI 每英存上用用的点数。

超过300PPi  就是视网膜屏幕了。