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

时间:2019-01-01 03:59:13

标签: c mp4 h.264 fmp4

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

我尝试使用FFMPG对fmp4文件进行编码,发现mdat框中的数据与原始I / P帧数据完全不同。
重新编码吗?
我可以直接将I / P帧的数据填充到mdat框中吗?

1 个答案:

答案 0 :(得分:0)

H.264可以采用不同的流格式。一个叫做“附件B”,另一个叫MP4。 在“附件B”中,您的NAL单位以开始码00 00 00 01或00 00 01为前缀。 在MP4中,您的NAL单位以字节大小为前缀。

我假设您的编码器发出“附件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框。