1

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

我尝试使用FFMPG对fmp4文件进行编码,发现mdat box中的数据与原来的I/P帧数据完全不同。
是不是又打码了?
可以直接将I/P帧的数据填入mdat box吗?

4

1 回答 1

3

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

我假设您的编码器发出“附件 B”。

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

  2. 使用大小(通常为 4 个字节)为您的 NAL 单元添加前缀

  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 框。

于 2019-01-02T22:31:56.280 回答