0

一連の MP4 ファイル (H.264 ビデオ、AAC オーディオ、16KHz) があります。それらをプログラム (Objective-C、iOS) でマージする必要がありますが、最終的なファイルが大きすぎてメモリに保持できないため、AVFramework を使用してこれを行うことはできません。

それぞれの MDATS のコンテンツを連結するだけで、マージを実行し、すべての MP4 アトム (STBL、STSZ、STCO など) を処理するコードを作成しました。私が抱えている問題は、結果のファイルが再生されている間、オーディオがビデオと徐々に同期しなくなることです。起こっているように見えるのは、各ファイルのオーディオとビデオの長さに不一致があり、連結するファイルが増えるほど悪化することです。

MP4Box を使用してコマンド ラインからファイルを生成しましたが、出力とは「似ていますが異なる」ものです。顕著な違いは、MDAT の長さが変更され、チャンク オフセットも変更されたことです (ただし、サンプル サイズは一貫しています)。

私は最近、AACエンコーディングがストリームの最初と最後にパディングを導入することを読んだので、これを処理する必要があるかどうか疑問に思います.

Q: H264 でエンコードされたデータと AAC オーディオを含む 2 つの MDAT アトムが与えられた場合、私の基本的な方法は正しいですか、それとも何らかの方法で MDAT データを内省する必要がありますか?

4

1 に答える 1

0

ポインターNielsに感謝

したがって、アプローチは完全に合理的であるように見えますが、サンプリング周波数の違いにより、個々の MP4 ファイルにはオーディオの長さとビデオの長さの間にわずかな違いがあります。MP4 には、そのファイルのこの問題を修正する EDTS.ELST の組み合わせが含まれています。ファイルをマージするときに EDTS を考慮していませんでした。EDTS をマージすると、問題が修正されました。

于 2014-01-22T20:38:55.013 に答える