最近在研究H.264码流文件的结构,现在总结整理一下。
H.264码流基本说明
MP4和H.264的关系
首先H.264/MPEG-4 AVC应该是一种视频编码格式,而MP4则是一个容器。
MP4用于封装H.264码流,为其提供一些额外的媒体数据,如记录码流的帧数之类的。
具体可以参考文章最后的参考文章。
格式名 | 描述 | 文件后缀名 |
---|---|---|
MP4 | 用于封装媒体数据的容器 | .mp4 |
H.264 | 一种视频编码方式,或者是H.264的码流文件 | .264 |
基本结构
H.264的码流文件分为两层,视频编码层(VCL)和网络提取层(NAL)
VCL | 视频编码层 | 进行视频编解码 |
NAL | 网络提取层 | 采用适当的格式对视频数据进行封装打包 |
VCL数据:
即被压缩编码后的视频数据序列。在VCL数据要封装到NAL单元中之后,才可以用来传输或存储。
所以我们只需要研究NAL单元即可。
NAL单元(NALU)
NALU由【起始码】【NAL头】【一个不定长编码段(Payload)】组成
如有一个 H.264 的 NALU 是这样的:
[00 00 00 01 67 42 A0 1E 23 56 0E 2F ... ]
- [00 00 00 01] 是四个字节的开始码
- [67] 是 NAL头
- [42 …] 开始的数据是 NAL内容(Payload)