NAL Unit解析

NAL Unit结构解析

NAL Unit包含NAL Header 和 NAL Body
NAL Header: 一个字节,包括:

  • forbidden_zero_bit: 0禁止位,1bit;
  • nal_ref_idc:参考索引,代表当前NAL Unit重要性,2bit;
  • nal_unit_type: NAL Unit类型,5bit;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
NAL Unit的头很简单,下面看看body

  • NAL Body包含了有效负载数据及其封装
  • NAL Body自外向内的封装共3层
    1. 第一层:EBSP–扩展字节序列载荷
    2. 第二层:RBSP–原始字节序列载荷
    3. 第三层:SODB–数据字节流

EBSP (Extended Byte String Payload)

  • 等同于NAL Body数据本身;
  • 在EBSP中(可能)包含了一个特殊的字节0x03,表示“防止竞争校验字节”(emulation_prevention_three_byte);
  • 作用:防止NAL Body内部出现与NAL Unit起始码0x 00 00 01或0x 00 00 00 01冲突。

怎么防止冲突的?
在这里插入图片描述
在这里插入图片描述
官方代码表格:如果出现两个00,后边会加入一个竞争防止位,这样24个bit为0x000003
解析时看到两个00把03去掉再解析,把03去掉后得到第二层数据RBSP

RBSP:Raw Byte Sequence Payload

  • 原始字节序列载荷:相当于NAL Body去掉附加03字节之后的数据;
  • 同原始的语法元素码流相比,RBSP在末尾增加了rbsp_trailing_bits()部分;
  • rbsp_trailing_bits():包括一个1bits和若干个0bit,用于实现字节的对齐

这样的RBSP数据是否就是语法元素值本身呢?语法元素进行编码之后,并不是按照每个bit进行对齐的,他可能在某个字节余下了几个bit的空余。所以空余需要用rbsp_trailing_bits填充,以实现字节的对齐。

最里边的一层称作SODB
SODB:String Of Data Bits

  • 表示H.264的语法元素编码完成后的实际的原始二进制码流。SODB通常不能保证字节对齐。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值