H.264/AVC基本概念

H.264/AVC概念

编码:
CABAC: 基于上下文自适应的二进制算术编码(Context-based Adaptive Binary Arithmetic Coding)
CAVLC: 基于上下文自适应变长编码(Context-based Adaptive Variable Length Coding)

CABAC和CAVLC是H.264中的两种熵编码算法.通过序列foreman和coastguard对CABAC和CAVLC的压缩性能进行了比较,
在给定的实验条件下得出CABAC的比特率比CAVLC节省5%~14%,并且随量化步长的增大,比特率节省增多.但是CABAC计算复杂度高,耗时比CAVLC长

CAVLC(Context Adaptive Variable Length Coding)是在H.264/MPEG-4AVC中使用的熵编码方式
(熵编码压缩,它是一种无损压缩,其实现原理是使用新的编码来表示输入的数据,从而达到压缩的效果)
在H.264中,CAVLC以zig-zag顺序用于对变换后的残差块进行编码。CAVLC是CABAC的替代品,虽然其压缩效率不如CABAC,但CAVLC实现简单,并且在所有的H.264profile中都支持

CABAC(ContextAdaptive Binary Arithmatic Coding)也是 H.264/MPEG-4AVC中使用的熵编码算法。
CABAC在不同的上下文环境中使用不同的概率模型来编码。
其编码过程大致是这样:首先,将欲编码的符号用二进制bit表示;然后对于每个bit,编码器选择一个合适的概率模型,并通过相邻元素的信息来优化这个概率模型;
最后,使用算术编码压缩数据

H.264编码原理以及I帧B帧P帧:
http://www.cnblogs.com/herenzhiming/articles/5106178.html

h264的压缩方法:
1.分组:把几帧图像分为一组(GOP,也就是一个序列),为防止运动变化,帧数不宜取多。
2.定义帧:将每组内各帧图像定义为三种类型,即I帧(帧内压缩)、B帧和P帧(帧间压缩);
3.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;
4.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

帧内(Intraframe)压缩也称为空间压缩(Spatial compression),仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,帧内一般采用有损压缩算法
帧间(Interframe)压缩称为时间压缩(Temporal compression),压缩相邻帧之间的冗余量就可以进一步提高压缩量,减小压缩比,帧间压缩一般是无损的.

I帧: 它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;
P帧: 采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);
B帧: 传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;

解码:
(预测值加残差得到重建图像)
I帧: 只需要解码本帧数据就可以完成重构图像(因为它包含完整画面)
P帧: 必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像

H.264中把图像分成一帧(frame)或两场(field),而frame又可以分成一个或几个片(Slilce),片由宏块(MB)组成。宏块是编码处理的基本单元。

1、一个frame的数据可以分为多个slice.
2、每个slice中的数据,在帧内预测只用到自己slice的数据, 与其他slice 数据没有依赖关系。
3、NAL 是用来将编码的数据进行大包的。 比如,每一个slice 数据可以放在NAL 包中。
4、I frame. 是自己独立编码,不依赖于其他frame. 数据。
P frame. 依赖 I frame. 数据。
B frame. 依赖 I frame, P frame. 或其他 B frame. 数据。
一个frame是可以分割成多个Slice来编码的,而一个Slice编码之后被打包进一个NAL单元,不过NAL单元除了容纳Slice编码的码流外,还可以容纳其他数据,比如序列参数集SPS。

H.264:
H.264/AVC视频编码标准中,整个系统框架被分两个层面:
VCL:
Video Code Layer视频编码层面,负责有效表示视频数据的内容,
NAL:
Network Abstract Layer网络抽象层,负责格式化数据并提供头信息,保证数据适合各种信道和存储介质上的传输
NAL单元是NAL的基本语法结构,它包含一个字节的头信息和一系列来自VCL的称为原始字节序列载荷(RBSP)的字节流
NALU对应的Slice为一帧的开始,则用4字节表示,即0x00000001;否则用3字节表示,0x000001(MP4文件,NAL单元之前没有同步码,有若干字节(一般为4字节)的长度码,来表示NAL单元的长度)
NAL Header:forbidden_bit(1bit),nal_reference_bit(2bits),nal_unit_type(5bits)

nal_unit_type:
0:未规定
1:非IDR图像中不采用数据划分的片段
2:非IDR图像中A类数据划分片段
3:非IDR图像中B类数据划分片段
4:非IDR图像中C类数据划分片段
5:IDR图像的片段
6:补充增强信息(SEI)
7:序列参数集(SPS)
8:图像参数集(PPS)
9:分割符
10:序列结束符
11:流结束符
12:填充数据
13:序列参数集扩展
14:带前缀的NAL单元
15:子序列参数集
16 – 18:保留
19:不采用数据划分的辅助编码图像片段
20:编码片段扩展
21 – 23:保留
24 – 31:未规定

NAL头:
0x67: SPS
0x68: PPS
0x65: IDR
0x61: non-IDR Slice
0x01: B Slice
0x06: SEI
0x09: AU Delimiter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值