码迷,mamicode.com
首页 > 其他好文 > 详细

H264/H265 Nal Unit Header

时间:2017-08-26 16:58:42      阅读:341      评论:0      收藏:0      [点我收藏+]

标签:for   nbsp   rac   格式   layer   单元   head   类型   orb   

NAL全称Network Abstract Layer,即网络抽象层。在H.264/H.265视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。NAL单元是NAL的基本语法结构,H264 NAL包含个字节的头信息和一系列来自VCL的称为原始字节序列载荷(RBSP)的字节流,H265 NAL包含个字节的头信息和一系列来自VCL的称为原始字节序列载荷(RBSP)的字节流。

如果NALU对应的Slice为一帧的开始,则用4字节表示,即0x00000001;否则用3字节表示,0x000001。

H264 NAL Header:

--------------------
|0|1|2|3|4|5|6|7|
--------------------
|F|N_R | Type  |

forbidden_bit: 1 bit,

nal_reference_idc: 2bit,VCL可以表征参考帧属性,参考帧非0,非参考帧0,Non-VCL 表征解码时的可丢弃与否,如SPS PPS不可丢弃 为1,SEI可丢弃为0

nal_unit_type: 5bit 表征当前NAL的类型,定义在标准Table 7-1。

JM: parser code

nalu->forbidden_bit = (*(nalu->buf) >> 7) & 1;
nalu->nal_reference_idc = (NalRefIdc) ((*(nalu->buf) >> 5) & 3);
nalu->nal_unit_type = (NaluType) ((*(nalu->buf)) & 0x1f);

Ex:以下为一段数据截图以及对应的解析

技术分享

技术分享

技术分享

 

H265 NAL Header:

 ---------------------------------------

|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
----------------------------------------
|F|    Type     |  LayerId   | Tid |

forbidden_bit: 1 bit,

nal_unit_type: 6 bit 表征当前NAL的类型,定义在标准Table 7-1。

nuhLayerId:6 bit 编码层级信息

temporalId:时间分级信息

HM Parser code: 以Byte获取的方式如右:假设pData指针指向Nal_header。

此处容易造成困惑的点是nuh_layer_id 的前一个Byte的一个bit与后一个Byte的5bit摆放和最终怎么组成实际返回值,前一个Byte的最低1 bit与后一个Byte的高5 bit。

Bool forbidden_zero_bit = bs.read(1); // forbidden_zero_bit                    (pData[0]>>7) & 0x1
assert(forbidden_zero_bit == 0);       
nalu.m_nalUnitType = (NalUnitType) bs.read(6); // nal_unit_type           (pData[0]>>1) & 0x3F
nalu.m_nuhLayerId = bs.read(6); // nuh_layer_id                                    (pData[0] & 0x1 << 5) + (pData[1]>>3) & 0x1F
nalu.m_temporalId = bs.read(3) - 1; // nuh_temporal_id_plus1               (pData[1] & 0x7) - 1

Ex:以下为一段数据截图以及对应的解析

 技术分享

技术分享

 

Ex:以下为temporalId 取值一段数据截图以及对应的解析

 技术分享

技术分享

技术分享

技术分享

 

H264/H265 Nal Unit Header

标签:for   nbsp   rac   格式   layer   单元   head   类型   orb   

原文地址:http://www.cnblogs.com/wissionzhang/p/7435543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!