Blog icon indicating copy to clipboard operation
Blog copied to clipboard

音视频处理基础知识

Open jason--liu opened this issue 5 years ago • 0 comments

H264基本概念

  • I帧 关键帧,采用帧内压缩技术
  • P帧 向前参考帧,压缩时只参考前一帧,属于帧间压缩技术
  • B帧 双向参考帧,压缩时既参考前一帧,也参考后一帧,属于帧间压缩技术 帧内预测压缩:解决的是空域数据冗余问题,比如删除一副图里人眼不是很敏感的颜色光亮等。 帧间预测压缩:解决的是时域数据冗余问题,随着时间轴的推移,删除重复的数据。 整数离散余弦变换(DCT):将空间上的相关性变为频域上无关的数据然后进行量化。

H264编码分层

  • NAL层 Network Abstraction Layer,视频数据网络抽象层 网络数据包一般最大为1500个字节,H264数据帧一般大于这个数据,通过NAL拆包。
  • VCL层 Video Coding Layer,视频数据编码层

码流基本概念

  • SODB String of Data Bits 原始数据比特流,长度不一定是8的倍数,它是由VCL层产生
  • RBSP Raw Byte Sequence Payload,SODB + trailing bits,算法是在SODB最后一位补1,不按字节对齐则补0.
  • EBSP Encapsulate Byte Sequence Payload,遇到两个连续的0x00就增加一个0x03
  • NALU NAL Header(1 B) + EBSP image 上图中的 NALU头 + RBSP 就相当与一个 NALU (Nal Unit), 每个单元都按独立的 NALU 传送。 其实说白了,H.264 中的结构全部都是以 NALU 为主的,理解了 NALU,就理解 H.264 的结构了。

SPS与PPS

  • SPS Sequence Parameter Set,序列参数集,存放帧数,参考帧数目,解码图像尺寸,帧场编码模式选择标识等
  • PPS Picture Parameter Set,图像参数集,存放熵编码模式选择标识,片组数目,初始化参数和去方块滤波系数调整标识等。 NAL层由多个单元NALU组成,NALU由了NALU头(00 00 00 01或者00 00 01)、sps(序列参数集)、pps(图像参数集合)、slice、sei、IDR帧、I帧(在图像运动变化较少时,I帧后面是7个P帧,如果图像运动变化大时,一个序列就短了,I帧后面可能是3个或者4个P帧)、P帧、B帧等数据。 一个完整的NALU单元结构图如下: image

H264切片(sliece)

首先需要知道,帧(frame)是用作描述一张图片的,一帧(frame)对应一张图片,而片(slice),是 H.264 中提出的新概念,是通过编码图片后切分通过高效的方式整合出来的概念,一张图片至少有一个或多个片(slice)。NALU 内就不一定是切片,因为 NALU 还有可能装载着其他用作描述视频的信息。 图片编码 NALU结构 片(slice)的具体结构,用一张图来直观说明, image 可以理解为一 张/帧 图片可以包含一个或多个分片(Slice),而每一个分片(Slice)包含整数个宏块(Macroblock),即每片(slice)至少一个 宏块(Macroblock),最多时每片包 整个图像的宏块。

NALU 头部中的类型

由三部分组成,forbidden_bit(1bit),nal_reference_bit(2bits)(优先级),nal_unit_type(5bits)(类型)。 image

H264码流分层结构

image

视频花屏卡顿原因

如果GOP分组中的P帧丢失会造成解码段的图像发生错误,为了避免花屏发生,一般如果P帧或者I帧丢失,就不显示GOP内的所以帧,直到下个I帧来后重新刷新图像

参考资料

H264编码总结 视频的基本参数及H264编解码相关概念

jason--liu avatar Jul 22 '19 04:07 jason--liu