H.264分层结构:VCL、NAL

H.264的功能分两层

VCL (VideoCoding Layer,视频编码层):负责高效的视频内容表示。

NAL(NetworkAbstraction Layer,网络提取层):负责以网络所要求的恰当的方式对数据进行打包和传送。

H264编码过程中的三种不同数据形式

SODB(String ofData Bits)数据比特串:最原始的编码数据,即VCL数据,没有任何附加数据。

RBSP(Raw ByteSequence Payload)原始字节序列载荷:在SODB的后面填加了结尾比特(RBSP trailing bits),一个bit“1”,若干bit “0”,以便字节对齐;

EBSP(EncapsulationByte Sequence Packets)扩展字节序列载荷:在RBSP基础上填加了仿校验字节(0X03)。它的原因是:在NALU加到Annexb上时,需要添加每组NALU之前的开始码StartCodePrefix,如果该NALU对应的slice为一帧的开始则用4位字节表示,ox00000001,否则用3位字节表示ox000001(是一帧的一部分)。解码器检测每个起始码,作为一个NAL的起始标识,当检测到下一个起始码时,当前NAL结束。对于NAL中数据出现0x000001或0x000000时,H.264引入了防止竞争机制,如果编码器遇到两个字节连续为0,就插入一个字节的0x03。解码时将0x03去掉,也称为脱壳操作。

NALU

    VCL层是对核心算法引擎、块、宏块及片的语法级别的定义,最终输出压缩编码后的数据 SODB。VCL数据在传输或存储之前,先被映射或封装进NAL单元中。NAL层将SODB打包成RBSP然后加上NAL头,组成一个NALU(NAL单元)。NAL层定义片级以上的语法级别(如序列参数集和图像参数集,针对网络传输),同时支持以下功能:独立片解码,起始码唯一保证,SEI以及流格式编码数据传送。

    每个NAL单元是一个一定字语法元素的可变长字节字符串,包括一个字节的头信息(用来表示数据类型),以及若干个整数字节的原始字节序列负荷(RBSP)。一个NAL单元可以携带一个编码片,A/B/C型数据分割或一个序列或一个图像参数集。H.264采用NAL单元接入可适用多种网络,而且进一步提高其抗误码能力。序列号的设置可以发现丢失的是哪一个VCL单元,冗余编码图像使得基本编码图像丢失仍可得到较“粗糙”的图像。

NALU头结构

    NALU头用来标识后面的RBSP是什么类型的数据,是否会被其他帧参考以及网络传输是否有错误。

长度:1byte

forbidden_bit(1bit)+ nal_reference_bit(2bit) + nal_unit_type(5bit)

 

forbid

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值