对H264 startcode一些粗浅的认识

对H264 startcode一些粗浅的认识

为什么需要startcode

主要是为了将相邻两个NALU划分开,让他们有一个界线,方便解码,比如将h264的数据存储在一个文件当中,解码器无法从数据流中分别每个NALU的起始位置。

在编码时,每个NALU前面添加startcode(占4字节0x00000001或者3字节0x000001),这里有人会想到万一中间出现0x000001怎么办呢,h264有个防止竞争的机制,在编码完一个NAL时,如果出现有连续两个0x00字节,就在后面插入一个0x03(解码的时候这个0x03会被丢弃)。

决定起始部分占4字节还是3字节

实际上startcode只占3字节,4字节的起始部分 = zero_byte + start_code_prefix_one_3bytes,就是说无论啥时候其实startcode都是3字节,关键就在于zero_byte。

包含sps,pps的NALU前面要加zero_byte(4字节)。
当一帧被分为多个slice时,首个NALU前面要加zero_byte(4字节)。

  SPS            (4字节头)
  PPS            (4字节头)
  SEI            (4字节头)
  I0(slice0)     (4字节头)
  I0(slice1)    (3字节头)
  P1(slice0)     (4字节头)
  P1(slice1)    (3字节头)
  P2(slice0)     (4字节头)
  P2(slice1)    (3字节头)

总结一下就是,当一个完整的帧被分为多个slice时,除掉第一个NALU,剩下的都用3字节的,其余的都是4字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值