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