我用C语言将H264帧(只有I / P帧)编码为fmp4文件。填充mdat框时,我不知道如何填充框架数据。
是否直接填充(I / P)帧数据?
前4个字节需要填充帧长吗?
我尝试使用FFMPG对fmp4文件进行编码,发现mdat框中的数据与原始I / P帧数据完全不同。
重新编码吗?
我可以直接将I / P帧的数据填充到mdat框中吗?
答案 0 :(得分:0)
H.264可以采用不同的流格式。一个叫做“附件B”,另一个叫MP4。 在“附件B”中,您的NAL单位以开始码00 00 00 01或00 00 01为前缀。 在MP4中,您的NAL单位以字节大小为前缀。
我假设您的编码器发出“附件B”。
删除起始代码(00)00 00 01
为NAL单元添加大小(通常为4个字节)
从流中过滤掉AUD / SPS / PPS NAL单位
将NAL单位转换为MDAT框
根据您的SPS,PPS和长度大小创建一个AVC配置框('avcC')
将avcC框存储在moov-> trak-> mdia-> minf-> stbl-> avc1-> avcC
将示例写入mdat时-跟踪大小,偏移量和帧类型以创建正确的stts,stss,stsc,stsz和stco框。