1.H264基本概念
1.1 I帧:关键帧,采用帧内压缩技术
如:动画每秒钟25帧以上,第1帧即为这里的I帧
1.2 P帧:向前参考帧,压缩时只参考前一个帧;属于帧间压缩技术
如:第2帧参考第1帧
1.3 B帧:双向参考帧,压缩时既参考前一帧,也参考后一帧;属于帧间压缩技术
如:第2帧参考第1帧和第3帧(缺点:实时互动直播参考后一帧时占用时间)
1.4 GOF:一组帧(一个I帧到下一个I帧之间的内容,一组帧内的变化是很小的)
在一组帧之前首先会收到SPS和PPS
1.5 SPS(Sequence Parameter Set)
I帧,序列参数集,存放帧数、参考帧数目、解码图像尺寸、帧场编码模式选择标识等
1.6 PPS(Picture Parameter Set)
I帧,图像参数集,存放熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等
2.视频花屏/卡顿原因
2.1 如果GOP分组中的P帧丢失会造成解码端的图像发生错误
2.2 为了避免花屏问题的发生,一般如果发生P帧或者I帧丢失,就不显示本GOP内的所有帧,直到下一个I帧来后重新刷新图像
总结:花屏是因为丢失了数据,卡顿时因为怕花屏主动扔掉了GOF
3.视频编码器
3.1 x264/x265
3.2 openH264(支持svc,即视频分层传输--根据网络情况发送小中大视频)
3.3 vp8/vp9
4.H264压缩技术
4.1 帧内预测压缩,解决的事空域数据冗余问题
空域数据:图片里的数据(宽高亮度等肉眼不易发现的数据)
4.1 帧间预测压缩,解决的是时域数据冗余问题
时域数据:摄像头补获很多数据,短时间内的去除掉重复数据
4.3 DCT 整数离散余弦变换,将空间上的相关性变为频域上无关的数据然后进行量化
4.4 CABAC压缩,无损压缩
5.H264结构图
一幅h264压缩后的视频帧由多个片组成,每个片由多个宏块组成,每个宏块由多个字块组成。
6.H264编码分层
6.1 NAL层:视频数据网络抽象层
作用:h264最终在网络上传输,以太网上传输的最大字节是1500,一个h264的帧>1500字节,所以需要进行拆包;就是将一个帧拆成多个包进行传输(拆包/解包均在NAL层处理)
6.2 VCL层:对视屏数据编码层
作用:对视频的原始数据进行压缩
7.码流基本概念
码流是指视频文件在单位时间内使用的数据流量,也叫码率,是视频编码中画面质量控制中最重要的部分。同样分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越高。
7.1 SODB:原始数据比特流,长度不一定是8的倍数,它是由VCL层产生的
7.2 RBSP:算法是在SODB最后一位补1,不按字节对齐则补0
7.3 EBSP:需要两个连续的0*00就增加一个0*03
7.4 NALU:NAL Header(1B)+EBSP