一連の MP4 ファイル (H.264 ビデオ、AAC オーディオ、16KHz) があります。それらをプログラム (Objective-C、iOS) でマージする必要がありますが、最終的なファイルが大きすぎてメモリに保持できないため、AVFramework を使用してこれを行うことはできません。
それぞれの MDATS のコンテンツを連結するだけで、マージを実行し、すべての MP4 アトム (STBL、STSZ、STCO など) を処理するコードを作成しました。私が抱えている問題は、結果のファイルが再生されている間、オーディオがビデオと徐々に同期しなくなることです。起こっているように見えるのは、各ファイルのオーディオとビデオの長さに不一致があり、連結するファイルが増えるほど悪化することです。
MP4Box を使用してコマンド ラインからファイルを生成しましたが、出力とは「似ていますが異なる」ものです。顕著な違いは、MDAT の長さが変更され、チャンク オフセットも変更されたことです (ただし、サンプル サイズは一貫しています)。
私は最近、AACエンコーディングがストリームの最初と最後にパディングを導入することを読んだので、これを処理する必要があるかどうか疑問に思います.
Q: H264 でエンコードされたデータと AAC オーディオを含む 2 つの MDAT アトムが与えられた場合、私の基本的な方法は正しいですか、それとも何らかの方法で MDAT データを内省する必要がありますか?