H.264/H.256相关概念介绍

2024-09-09  本文已影响0人  orgcheng

码流格式有两种:Annex B和HVCC
Android中使用前者,Mac使用后者,本文讨论Annex B格式

一、防止竞争机制

为了防止与NALU的起始码产生混淆,引入了“防止竞争”(Emulation Prevention)机制。

具体步骤如下:

下面的序列需要编码器在最后一个字节前插入一个新的字节0x03
0x00 00 00 → 0x00 00 03 00
0x00 00 01 → 0x00 00 03 01
0x00 00 02 → 0x00 00 03 02 (保留用的)
0x00 00 03 → 0x00 00 03 03

需要注意的是,这种防止竞争的处理仅在Annex B格式中使用。

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

二、码流结构

在H.264/AVC和H.265/HEVC视频编码标准中,VCL(Video Coding Layer)和NAL(Network Abstraction Layer)是两个关键概念,它们共同构成了视频编码的框架。

VCL(Video Coding Layer):
NAL(Network Abstraction Layer):
通过NAL的介绍,我们可以理解,网络传输的码流结构是:

起始码 + NAL头 + NALU数据
Start Code + NALU Header + NALU Playload

另外,关于SODB、RBSP和EBSP的相关概念,可以参考下图:

image.png

三、NALU Header

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的类型
image.png
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:时间分级信息

image.png
上一篇下一篇

猜你喜欢

热点阅读