立即学习:https://edu.csdn.net/course/play/2777/44073?utm_source=blogtoedu
H264
帧内压缩:
- 视频预测是采用 16x16、4x4 多种形式分割,16*16有4种预测模式,4*4有9种预测模式
- 预测模式中选择一种最好的,然后保存残差量化后的图像和预测模式
- 也可以采用 I_PCM(不采用任何预测模式)
- 残差图像进行 DCT变换,使用 CABAC 进行无损压缩
帧间预测:
- 视频预测是采用 16x16、16x8、8x16、8x8、8x4、4x8、4x4 多种形式分割
- (GOP)帧分组算法是:在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内,我们认为这样的图可以分到一组。
- 对前后帧,计算块最接近的块,和帧内一样,对残差进行 DCT变换,量化,无损压缩
对分块(通常是残差)进行 DCT 变换,低频进行细量化,高频进行粗量化
运动补偿将图像切割成块,然后前后帧计算图像块的残差。
实际应用中,将残差图像进行 DCT 变换和量化,然后一部分使用熵编码,一部分反量化和反 DCT 变换后,与运动补偿图像相加,获得新的预测图像。
NALU
NALU 以 0x00000001(0x000001) 开始(Annex-B),也就是分割头,有些直接是帧的长度(RTP)(很少见)
紧接着就是 NALU 头,
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+
NRI 重要性
头取值的重要意义:
0x01 B 帧
0x61 P 帧
0x65 . I 帧
0x67. sps
0x68. pps
第一层 EBSP. 扩展字节序列载荷
如果出现两个 00 00 [00/01/02/03],则修改成 00 00 03 [00/01/02/03]
去掉 上面所说的 03 后,就是 RBSP
第二层 RBSP 原始字节序列载荷
最后一个 Byte 如果实际位数不够,则补1后面若干个0。有视频占用的不是 Byte的整数?
刨去最后一个字节的处理,就是 SODB
第三层 SODB 数据字节流