文章目录一、核心名词区分1. NALUNetwork Abstraction Layer Unit网络抽象层单元2. AnnexB 格式带起始码的裸流你平时文件/摄像头输出的标准裸流定义NALU 前面拼接 **起始码前缀**3. AVCC / AVCC Annex不带起始码长度前缀封装二、一句话总结对应关系三、结合你之前FFmpeg推流场景重点四、示例对比AnnexB标准264裸流带起始码纯NALU剥离起始码AVCCRTMP/MP4内部长度头代替起始码从这讲开始我们进入了编码的深水区这些内容的概念一定要头脑清楚否则后面开发容易混淆。一、核心名词区分1. NALUNetwork Abstraction Layer Unit网络抽象层单元NALU 去掉起始码后的一段纯载荷二进制内部结构1字节NALU头 视频数据SPS/PPS/I/P帧等特征不带00 00 01/00 00 00 01起始码所有H264最小数据单元都叫NALUNALU Type7 → SPSType8 → PPSType5 → I帧Type1 → P帧2. AnnexB 格式带起始码的裸流你平时文件/摄像头输出的标准裸流定义NALU 前面拼接起始码前缀起始码两种3字节0x00 00 01普通NALU前缀4字节0x00 00 00 01码流第一个NALU、分片开头常用结构[起始码] NALU后缀文件.h264/.264场景海康/大华RTSP输出裸流、本地保存的裸流文件、FFmpeg-f h264识别的流关键词AnnexB裸流、AnnexB格式H264、带起始码裸流3. AVCC / AVCC Annex不带起始码长度前缀封装没有0001起始码取而代之用4字节大端长度描述NALU长度结构[4字节NALU长度] NALU场景MP4容器、FLV/RTMP内部封装、MP4文件内部存储H264RTMP协议内部传输H264时内部是AVCC格式不带起始码二、一句话总结对应关系不带任何起始码纯载荷→ NALUNALU 0001/000001起始码→ AnnexB H264裸流标准.264文件NALU 4字节长度头无起始码→ AVCC格式MP4/RTMP内部三、结合你之前FFmpeg推流场景重点本地.h264文件、摄像头RTSP原始码流 AnnexB带起始码NALUFFmpeg 参数-f h264专门识别这种格式推RTMP到SRS时FFmpeg内部会自动把AnnexB → 转成AVCC封装进FLV Tag自动去掉起始码替换成长度头你不用手动处理。四、示例对比AnnexB标准264裸流带起始码00 00 01 67 xx xx ...00 00 01 68 xx xx ...00 00 01 65 xx xx ...纯NALU剥离起始码67 xx xx ...SPS NALU68 xx xx ...PPS NALU65 xx xx ...I帧 NALUAVCCRTMP/MP4内部长度头代替起始码00 00 00 12 67 xx xx ...前4字节00 00 00 12 后面NALU字节长度。根据大端规则表示后面18个字节。补充规则AVCC/FLV/RTMP 统一长度字段固定 4 字节、大端存储长度只包含 NALU 本体不包含这 4 字节长度头自己和 AnnexB 区别AnnexB00 00 01 起始码分割 NALUAVCC4 字节长度头声明 NALU 长度无起始码
(第五讲)NALU- AnnexB- AVCC概念区分
发布时间:2026/6/27 2:22:28
文章目录一、核心名词区分1. NALUNetwork Abstraction Layer Unit网络抽象层单元2. AnnexB 格式带起始码的裸流你平时文件/摄像头输出的标准裸流定义NALU 前面拼接 **起始码前缀**3. AVCC / AVCC Annex不带起始码长度前缀封装二、一句话总结对应关系三、结合你之前FFmpeg推流场景重点四、示例对比AnnexB标准264裸流带起始码纯NALU剥离起始码AVCCRTMP/MP4内部长度头代替起始码从这讲开始我们进入了编码的深水区这些内容的概念一定要头脑清楚否则后面开发容易混淆。一、核心名词区分1. NALUNetwork Abstraction Layer Unit网络抽象层单元NALU 去掉起始码后的一段纯载荷二进制内部结构1字节NALU头 视频数据SPS/PPS/I/P帧等特征不带00 00 01/00 00 00 01起始码所有H264最小数据单元都叫NALUNALU Type7 → SPSType8 → PPSType5 → I帧Type1 → P帧2. AnnexB 格式带起始码的裸流你平时文件/摄像头输出的标准裸流定义NALU 前面拼接起始码前缀起始码两种3字节0x00 00 01普通NALU前缀4字节0x00 00 00 01码流第一个NALU、分片开头常用结构[起始码] NALU后缀文件.h264/.264场景海康/大华RTSP输出裸流、本地保存的裸流文件、FFmpeg-f h264识别的流关键词AnnexB裸流、AnnexB格式H264、带起始码裸流3. AVCC / AVCC Annex不带起始码长度前缀封装没有0001起始码取而代之用4字节大端长度描述NALU长度结构[4字节NALU长度] NALU场景MP4容器、FLV/RTMP内部封装、MP4文件内部存储H264RTMP协议内部传输H264时内部是AVCC格式不带起始码二、一句话总结对应关系不带任何起始码纯载荷→ NALUNALU 0001/000001起始码→ AnnexB H264裸流标准.264文件NALU 4字节长度头无起始码→ AVCC格式MP4/RTMP内部三、结合你之前FFmpeg推流场景重点本地.h264文件、摄像头RTSP原始码流 AnnexB带起始码NALUFFmpeg 参数-f h264专门识别这种格式推RTMP到SRS时FFmpeg内部会自动把AnnexB → 转成AVCC封装进FLV Tag自动去掉起始码替换成长度头你不用手动处理。四、示例对比AnnexB标准264裸流带起始码00 00 01 67 xx xx ...00 00 01 68 xx xx ...00 00 01 65 xx xx ...纯NALU剥离起始码67 xx xx ...SPS NALU68 xx xx ...PPS NALU65 xx xx ...I帧 NALUAVCCRTMP/MP4内部长度头代替起始码00 00 00 12 67 xx xx ...前4字节00 00 00 12 后面NALU字节长度。根据大端规则表示后面18个字节。补充规则AVCC/FLV/RTMP 统一长度字段固定 4 字节、大端存储长度只包含 NALU 本体不包含这 4 字节长度头自己和 AnnexB 区别AnnexB00 00 01 起始码分割 NALUAVCC4 字节长度头声明 NALU 长度无起始码