H264的压缩比?
条件:
1、YUV格式为YUV420
2、分辨率为640x480
3、帧率为15
码率为 640 * 480 * 1.5 * 15 = 6912000字节
由于网络传输的是bit 所以bit率= 6912000 * 8 = 55296000 bit = 55M
H264建议的码率是500k
我们可以得到压缩比约1/100
H264建议的码率500K不是算出来的,而是经验总结
我们可以查看声网的说明
https://docs.agora.io/cn
https://docs.agora.io/cn/Video/video_profile_apple?platform=iOS 我们在这里可以看到建议码流
什么是GOP
- GOP 中帧与帧之间的差别很小
- GOP和GOP之间的差别很大
GOP就是将一些帧,按照相关性进行分组进行存储,由于GOP中图像相近,就可以通过算法来进行压缩。
I/P/B帧
- I帧(intraframe frame),关键帧,关键帧采用帧内压缩技术,IDR帧属于I帧(GOP帧中的第一帧就是IDR帧,I帧包含IDR帧),I帧不依赖任何帧
- P帧(forward predicated frame),向前参考帧。压缩时,只参考前面已经处理的帧,采用帧间压缩技术,它占I帧的一半大小
- B帧(Bidirectionally predicted frame),双向参考帧。压缩时,即参考前面已经处理好的帧,也参考后面的帧。帧间压缩技术。它占I帧的1/4大小
B 帧因为是即参考参考前面的帧又参考后面的帧,cpu处理速度就慢,所以不可以都是B帧。
现实中音视频会议(实时通讯),看重的是速度,所以使用I 、P 帧
音视频转码的服务中会大量使用B帧(目的是为了减少存储空间)
什么是IDR帧
IDR(Instantaneous Decoder Refresh)解码器立即刷新
一组帧中,按照相关性分成若干GOP,GOP的第一帧是IDR。当到达一个新的GOP时,就会刷新清空缓冲区,再解析新的IDR帧。
每个GOP中的第一帧IDR帧
IDR帧包含于I帧
GOP的编码顺序与播放顺序
解码顺序是IPBBBPBBBIBBBPBBB
播放顺IBBBPBBBPBBBIBBBP
SPS与PPS
不能称为帧,属于I帧的一部分
SPS----Sequence Parameter Set 序列参数集
作用于一串连续的视频图像。如seq_parameter_set_id,帧数及POC(picture order count)的约束,参考帧数目,解码图像尺寸和帧场编码模式选择标识等。
PPS-----picture parameter set
图像参数集,作用视频序列中的图像。如pic_parameter_set_id,熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识。
H264压缩技术
- 帧内压缩,解决的是空域数据冗余问题(空域-一张图片占用一定的空间,比如一张图片的背景是一个颜色,那么就可以用很少的数据量来进行标识,而无需一个一个点的标识)
- 帧间压缩,解决的是时域数据的冗余问题(一段时间内,后面的帧参考前面的帧,只需要对变化的部分进行压缩就可以了)
- 整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化(真正有数据的进行压缩,其余变为0)
- CABAC压缩
前两点是有损压缩
后两点是无损压缩
宏块
- 宏块是视频压缩操作的基本单元
- 无论是帧内压缩还是帧间压缩,他们都是以宏块为单位的
宏块划分越细,越容易控制
常见的宏块划分
16 * 16 8 * 16 16*8 8 * 8
8 * 8 4 * 4 4 * 8 8 * 4