H.264码流解析

 

H.264码流解析前言

H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(...







H.264码流解析


前言


     H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。这个标准通常被称之为H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)而明确的说明它两方面的开发者。

      H264标准各主要部分有Access Unit delimiter(访问单元分割符),SEI(附加增强信息),primary coded picture(基本图像编码),Redundant Coded Picture(冗余图像编码)。还有Instantaneous Decoding Refresh(IDR,即时解码刷新)、Hypothetical Reference Decoder(HRD,假想参考解码)、Hypothetical Stream Scheduler(HSS,假想码流调度器)。

[quote]在H.264/AVC标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。

VCL负责表示视频数据的内容,NAL则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。

在VCL数据传输或存储之前,这些编码的VCL数据,先被映射或封装进NAL单元中。

NAL单元是NAL的基本语法结构,它包含一个字节的头信息和一系列来自VCL的称为原始字节序列载荷的字节流(RBSP)。

H264码流结构图:



起始码:如果NALU对应的slice为一帧的开始,NAL则用4字节表示,即0x00 00 00 01,负责用3字节表示:0x00 00 01。

NAL Header:forbidden_bit,nal_reference_bit(优先级),nal_unit_type(类型)。

脱壳操作:为了使NALU主体不包括起始码,在编码时每遇到两个字节(连续)的0,就插入一字节0x03,以和起始码区别。

NAL单元解码流程:



流程为:首先从NAL单元中提取出RBSP结构流,然后根据NALU类型处理RBSP数据。

从h264原文件中分离出NAL数据,用c代码的一种实现方式:

[cpp]

[list=1][*]int FindStartCode (unsigned char *Buf, int zeros_in_startcode)

[/*][*]{

[/*][*]  int info;

[/*][*]  int i;

[/*][*]

[/*][*]  info = 1;

[/*][*]  for (i = 0; i 


    关注 图像处理知识库


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册