描述:
NALU(Network Abstract Layer Unit)全称为网络抽象层单元。
一个NALU由:
- NALU头部信息
- 原始字节序列负荷(RBSP,Raw Byte Sequence Payload).
组成.
NALU结构单元的主体结构:
一个原始的H.264 NALU单元通常由:
[StartCode] [NALU Header] [NALU Payload]三部分组成.
头部信息分析:
- 0x00000001或0x000001是一个nalu的起始标志
- 起始标志的后面第一个字节(type)里包含有NALU的类型,type & 0x1F即为该nalu的类型(nal_unit_type), 即字节的低5位: xxx-[4][3][2][1][0]
- nal_unit_type=7时,NALU为SPS;
- nal_unit_type=8时,NALU为PPS。
- nal_unit_type=6时,NALU为SEI。
- nal_unit_type=5是,NALU为I帧。
- nal_unit_type=1时,NALU为“非IDR图像的编码条带”,为P或B帧。
功能分为两层
VCL(视频编码层)和NAL(网络提取层):
用图举例说明:
H264有两种封装:
- 一种是annexb模式,传统模式,有startcode,SPS和PPS是在ES中(占多数)
- 一种是mp4模式,一般mp4 mkv都是mp4模式,没有startcode,SPS和PPS以及其它信息被封装在container中,每一个frame前面4个字节是这个frame的长度
mp4模式->annexb模式:
借助ffmpeg: h264_mp4toannexb_filter进行转换