关于fmp4编码,如何用H264帧填充mdat框?

about fmp4 encoding , how to fill the mdat box wit H264 frame?

我用C语言将H264帧(只有I/P帧)编码成fmp4文件。填mdat框的时候不知道怎么填帧数据
(I/P)帧数据是直接填充的吗?
前4个字节是否需要填写帧长?

我尝试用FFMPG对fmp4文件进行编码,发现mdat框中的数据和原来的I/P帧数据完全不一样
是不是又打码了?
可以直接把I/P帧的数据填入mdat框吗?

H.264 可以采用不同的流格式。一种叫做 "Annex B" 另一种是 MP4。 在 "Annex B" 中,您的 NAL 单元的前缀为起始代码 00 00 00 01 或 00 00 01。 在 MP4 中,您的 NAL 单元以字节大小为前缀。

我假设您的编码器发出 "Annex B"。

  1. 去掉起始码(00)00 00 01

  2. 在您的 NAL 单元前加上大小(通常为 4 个字节)

  3. 从您的流中过滤掉 AUD/SPS/PPS 个 NAL 单元

  4. 将您转换的 NAL 单元写入 MDAT 框

  5. 根据您的 SPS、PPS 和长度大小创建一个 AVC 配置框 ('avcC')

  6. 将你的avcC盒存储在moov->trak->mdia->minf->stbl->avc1->avcC

  7. 在将样本写入 mdat 时 - 跟踪大小、偏移量和帧类型以创建正确的 stts、stss、stsc、stsz 和 stco 框。