H264压缩比
条件:1.YUV格式为YUV420 2.分辨率为640×480 3.帧率为15
建议码流500kbps,通过计算可以得到H264压缩比约为1:100。
GOP
GOP中帧与帧之间的差别小
I/P/B帧
I帧:关键帧,采用帧内压缩技术。IDR帧属于I帧。
P帧:向前参考帧,压缩时,只参考前面已经处理的帧,采用帧间压缩技术。它占I帧的一半大小。
B帧:双向参考帧,压缩时,既参考前面已经处理的帧,也参考后面的帧,采用帧间压缩技术。它占I帧1/4大小。
B帧的解码要参考I帧(也可以是前面的P帧)与P帧,B帧与B帧之间是没有任何参考的。
解码之后播放不分I帧,B帧,P帧,因为解码之后都是一幅幅图像。
IDR帧与I帧的区别与联系:IDR解码器立即刷新,每当遇到IDR帧时,解码器就会清空解码器参考buffer中的内容,每个GOP中的第一帧就是IDR帧。
SPS与PPS
SPS
序列参数集,作用于一串连续的视频图像。
PPS
图像参数集,作用于视频序列中的图像。
H264压缩技术
有损压缩包括帧内压缩和帧间压缩,帧内压缩解决的是空域数据冗余问题,帧间压缩解决的是时域数据冗余的问题。
无损压缩包括DCT,CABAC压缩,其中DCT就是指离散余弦变换,将空间上的相关性变为频域上无关的数据然后进行量化。
宏块
宏块是视频压缩操作的基本单元,无论是帧内压缩还是帧间压缩,它们都以宏块为单位。
帧内压缩的理论
相邻像素差别不大,所以可以进行宏块预测。
人们对亮度的敏感度超过色度
YUV很容易将亮度和色度分开
帧间压缩原理
GOP
参考帧
运动估计(宏块匹配+运动矢量)
运动补偿(解码)
宏块查找算法
三步搜索
二维对数搜索
四步搜索
钻石搜索
视频花屏原因
如果GOP分组中有帧丢失,会造成解码端的图像发生错误,这会出现马赛克(花屏)。
视频卡顿原因
为了避免花屏问题的发生,当发现有帧丢失时,就会丢弃GOP内所有帧,直到下一个IDR帧重新刷新图像。I帧是按照帧周期来的,需要一个比较长的时间周期,如果在下一个I帧来之前不显示后来的图像,那么视频就静止不动了,这就是出现了所谓的卡顿现象。
无损压缩
DCT变换(数据从分散到集中)
VLC压缩(MPEG2)
CABAC压缩(H.264)
H264码流分层
NAL层 视频数据网络抽象层
VCL层 视频数据编码层
码流基本概念
SODB:原始数据比特流,长度不一定是8的倍数,故需要补齐。它是由VCL层产生。
RBSP:SODB+trailing bits 算法是如果SODB最后一个字节不对齐,则补1和多个0。
NALU:NAL Header+RBSP
profile与level
H264 profile是对视频压缩特性的描述,profile越高,就说明采用了越高级的压缩特性。
H264 level是对视频的描述,level越高,视频的码率,分辨率,fps越高。
帧相关
帧数 log2_max_frame_num_minus4
参考帧数 max_num_ref_frames
显示帧序号 pic_order_cnt_type
Slice Header
帧类型
GOP中解码帧序号
预测权重
滤波