H264/AVC-NALU解析

简介

NALU是H264码流的基本单元。它的起始码是0x000001或0x00000001,可以根据起始码查找NALU元素。如下图所示,
在这里插入图片描述
H264中NALU由header和body两部分构成。

NALU header

在这里插入图片描述

  • forbidden_zero_bit,必须为0
  • nal_ref_idc, 如果nalu_type为slice,表示该slice是否用作参考
  • nal_unit_type,表示nalu类型
    NALU类型定义如下,一般比较常见的几种类型是非IDR slice(type=1)、IDR(type=5)、SPS(type=7)、PPS(type=8)
    在这里插入图片描述

NALU body

Nalu body生成流程如下:
SODB-》RBSP-》NALU body

  • 视频编码生成的比特流称为SODB(String of Data Bits)。由于SODB可能不是整数字节,因此需要在后面填充数据使其变成整数字节,填充后的比特流称为RBSP(Raw Byte Sequence Payload)。
    SODB生成RBSP过程如下:
  1. RBSP第1字节取SODB最左端8比特,第2字节取接下来8比特,以此类推直到SODB剩余内容不足8比特。
  2. RBSP下一字节首先包含SODB最后几个比特,然后添加比特1,如果该字节还不满8比特后面填充0。
  3. 后面可能加入若干16比特的cabac_zero_word作为填充比特,其值为0x00 00。
  • RBSP还不能直接作为NALU Body,因为RBSP中可能含有0x00 00 01,与起始码冲突,必须先进行冲突避免处理。规则如下:遇到0x000000、0x000001、0x000002、0x000003在两个00字节后插入一个字节0x03.
    0x000000 -> 0x00000300
    0x000001 -> 0x00000301
    0x000002 -> 0x00000302
    0x000003 -> 0x00000303
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值