0

我有一系列 MP4 文件(H.264 视频、AAC 音频、16KHz)。我需要以编程方式将它们合并在一起(Objective-C,iOS),但最终文件太大而无法保存在内存中,因此我无法使用 AVFramework 为我执行此操作。

我已经编写了代码,它将进行合并并处理所有 MP4 原子(STBL、STSZ、STCO 等),仅基于连接各个 MDATS 的内容。我遇到的问题是,在播放结果文件时,音频逐渐与视频不同步。似乎正在发生的事情是,每个文件中的音频和视频长度之间存在差异,我连接的文件越多,这种差异就越严重。

我使用 MP4Box 从命令行生成一个文件,它与我的输出“相似但不同”。一个显着的不同是 MDAT 的长度发生了变化,块偏移也发生了变化(尽管样本大小保持一致)。

我最近读到 AAC 编码在流的开头和结尾引入了填充,所以想知道这是否是我需要处理的事情。

问:给定两个包含 H264 编码数据和 AAC 音频的 MDAT 原子,我的基本方法是声音还是我需要以某种方式内省 MDAT 数据。

4

1 回答 1

0

感谢尼尔斯的指点

因此,该方法似乎完全合理,但是由于采样频率之间的差异,每个单独的 MP4 文件在音频长度和视频长度之间存在边际差异。MP4 包含一个 EDTS.ELST 组合,可纠正该文件的此问题。我在合并文件时没有考虑 EDTS。合并 EDTS 已解决此问题。

于 2014-01-22T20:38:55.013 回答