H.264——NAL Unit结构分析

在这里插入图片描述

NAL Unit格式

在这里插入图片描述
这一部分在h.264标准文档的7.3节。

在这里插入图片描述
解释部分在h264标准文档的7.4.1节
在这里插入图片描述

NAL Header

   +---------------+
   |0|1|2|3|4|5|6|7|
   +-+-+-+-+-+-+-+-+
   |F|NRI|   Type  |
   +---------------+
  • //F: 1个比特.
    forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0.

  • //NRI: 2个比特.
    nal_ref_idc. 取00~11,似乎指示这个NALU的重要性,如00的NALU解码器可以丢弃它而不影响图像的回放,11表示其可能有SPS、PPS和作为参考帧的slice等等比较重要的数据.
    比如在网传的时候,如果网络卡,那么就需要适当丢掉一些数据,丢掉哪些数据就是根据重要性来进行选择

  • //Type: 5个比特.
    nal_unit_type. 这个NALU单元的类型.简述如下:

 - - 0  没有定义
 - - 1-23 NAL单元 单个 NAL 单元包
 - - 24  STAP-A  单一时间的组合
 - - 25  STAP-B 单一时间的组包 
 - - 26  MTAP16  多个时间的合包
 - - 27  MTPA24  多个事件组合包
 - - 28  FU-A	 一帧单包传输
 - - 29  FU-B    一帧分多包传输 
 - - 30-31  	 没有定义
h264仅用1-23,24以后的用在RTP H264负载类型头中

nal_unit_type

在h264标准文档的表7-1
在这里插入图片描述

  • 0是没有定义的
  • 7——该NALU承载SPS序列参数集
  • 8——该NALU承载PPS图像参数集

通过这个方式,我们只需要读取NAL包的第一个单元,就能知道这个NALU包含的是什么,并且能针对不同内容对其进行解析或解码

NAL Body

在这里插入图片描述

Extended Byte String Payload

在这里插入图片描述
可以在h264标准文档中看到
在这里插入图片描述

  • 若内部的连续4个字节数据出现了以下情况时
- 0x 00 00 00
- 0x 00 00 01
- 0x 00 00 02
- 0x 00 00 03
  • 在两个0字节之后会插入值为3的一个字节:
- 0x 00 00 03 00
- 0x 00 00 03 01
- 0x 00 00 03 02
- 0x 00 00 03 03

防止NAL内部出现和起始码一样的冲突

在00后面插入一个03,形成的就是Extended Byte String Payload
如果需要对其解析,需要将03去除后进行解析。

RBSP和SODB

在这里插入图片描述
RBSP是去掉03后的数据

问:RBSP是不是等同于原始语法元素值本身?

有时候并不是如此。语法元素进行编码后,并不是按照每个byte对其,可能最后在整数个字节后余下3、4、5个bit的空余;而RBSP(Raw Byte Sequence Payload)有个字是byte,也就是说这里面的数据是按照字节来对齐的
。因此在希望得到这样的数据的时候,需要在原始语法元素的码流后面添加一个rbsp_trailing_bits,作用是实现字节的对其。
rbsp_trailing_bits包含一个固定的1bitt和若干个0bit,0的数量直到实现字节对其为止。

---xxx|10|100000|
---------|rtb   |

NAL Unit是紧密传输的,若一个NALU没有对齐,后面的NALU都不会对齐。所以需要时时刻刻进行对齐,在比特位进行比对的操作,但这样对接收端和解码端造成极大的负担。所以在RBSP这一层添加了字节对齐的功能。

SODB:String Of Data Bits

实际h264语法元素编码后的二进制码流(不保证对齐),即编码后的视频流
大多数情况会有空余,所以需要逐层向上封装,形成NALU这样的结构

结构关系

RBSP + RBSP trailing bits + SODE = RBSP
NAL header(1byte) + RBSP = NALU

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Spark!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值