1.H264码流组成
H264编码后的码流由NAL(网络抽象层)和VCL(视频编码层)构成,VCL数据传输或者存储之前,会被映射到一个NALU中,H264数据包含一个个的NALU
H.264的编码帧序列包括一系列的NALU,其中NALU = NALU-Header + RBSP。
H.264BitsStream = Start-Code-Prefix(3 bytes) + NALU + Start-Code-Prefix(3 bytes) + NALU + ...
2.NALU-Header分析
NALU-Header(1字节):
分类名 | 位置 | 位数 | 内容描述 |
F | 0 | 1bit | 固定为0 |
NRI | 1、2 | 2bit | 表示级别0~3 (0可丢弃,3最重要) |
Type | 3、4、5、6、7 | 5bit | NALU的帧类型 比如:7-sps 8-pps 5-I帧 1-P帧 |
3.RTP-Header介绍(至少12字节)
(至少12字节): 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
V P X CC M PT sequence No.
前4字节: V: version?10-表示版本2
P: Padding
X: Extension
CC: CSRC的count (4bit)
M: Mark (1bit)
PT: (7bit)
SN: sequence No (2Bytes)
4字节: TS: timestamp
4字节: SSRC: S SRC identifier
4字节: CSRC: C SRC identifier
CSRC至少有一个,若有多个,则由CC标记位表示个数,并紧跟着上一个4字节的CSRC往下排。
3.1 RTP-Header之后若是单一帧,则是NALU-Header + RBSP数据。
NALU-Header同上,没改变。
3.2 RTP-Header之后若是组合帧,则是NALU-Header + 数据 + 。
NALU-Header的F与NRI同上,type标识为24,表示组合帧。
3.2 RTP-Header之后若是分片帧,则是FU-indicator + FU-header + RBSP数据。
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
F NRI Type S E R Type
F/NRI:同上 S: 1起始 0其他
Type: 固定28(分片帧) E: 1结束 0其他
Type: 就是帧的类型(5是I帧,1是p帧)