NALU的解析(包括SEI的知识)decodeSODBSeiData

一. NALU的基础知识

1.1 基础知识

Annex-B,StartCode,AVCC

Annex-B: 使用start code分隔NAL(start code为三字节或四字节,0x0000010x00000001,一般是四字节);SPS和PPS按流的方式写在头部
Start Code: 起始码+NALU的方式,其中4字节的起始码0x00000001通常标志流的随机访问点SPS, PPS, AUD,IDR,其他NALU使用3字节的起始码
AVCC: 使用NALU长度(固定字节,通常为4字节)分隔NAL;在头部包含 **extradata** (或sequence header)的结构体

Annex-B的NALU的结构

在这里插入图片描述

H264 NALU: 00 00 00 01(4字节) NALU type(1字节) NALU_data (N字节) 0x00 00 00 01
起始码(4字节) 类型 数据 下一个NALU

NALU_type 1字节,定义为:

1比特禁止位 2比特 重要性指示位 5比特 类型
固定为0 11 1-12 由h264使用
1.2 H264和H265中的NALU的信息
if(isH265) {
   	
    nalu_unit->type = (src_data->ReadInt(1) & 0x7E) >> 1;
}else {
   
    nalu_unit->type = (src_data->ReadInt(1) & 0x1F);
}

1.2.1 H264中的NALU的类型

enum class H264NaluType: int {
   
    kNalSlice          = 1,  // 非IDR的片
    kNalDPA            = 2, // 片数据A分区
    kNalDPB            = 3, // 片数据B分区
    kNalDPC            = 4, // 片数据C分区
    kNalIDR_Slice      = 5, // IDR图像的片
    kNalSEI            = 6, // 补充增强信息单元(SEI)
    kNalSPS            = 7, // 序列参数集(SPS)
    kNalPPS            = 8, // 图像参数集(PPS)
    kNalAUD            = 9, // 间隔符
    kNalEndSequence    = 10,
    kNalEndStream      = 11,
    kNalFillerData     = 12,
    kNalSpsExt         = 13,
    kNalAuxiliarySlice = 19,
    kNalFfIgnore       = 0xff0f001
};
0x61 (0 11 00001) I帧        重要       type = 1   非IDR的I帧 不大常见
0x41 (0 10 00001) P帧        重要       type = 1     
0x01 (0 00 00001) B帧        不重要     type = 1

所以判断是否为IDR帧的算法为:
(NALU类型&0001 1111)=5 即 NALU类型0x65&0x1F=5

1.2.2 H265中的NALU的类型

enum class HEVCNaluType : int {
   
    kNalTrailN    = 0,
    kNalTrailR    = 1,
    kNalTsaN      = 2,
    kNalTsaR      = 3,
    kNalStsaN     = 4,
    kNalStsaR     = 5,
    kNalRadlN     = 6,
    kNalRadlR     = 7,
    kNalRaslN     = 8,
    kNalRaslR     = 9,
    kNalBlaWLP    = 16,
    kNalBlaWRadl  = 17,
    kNalBlaNLP    = 18,
    kNalIdrWRadl  = 19,
    kNalIdrNLP    = 20,
    kNalCraNut    = 21,
    kNalVps       = 32,
    kNalSps       = 33,
    kNalPps       = 34,
    kNalAud       = 35,
    kNalEosNut    = 36,
    kNalEobNut    = 37
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爽朗地狮子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值