2013-10-24 60 views
0

我有一系列MP4文件(H.264視頻,AAC音頻,16KHz)。我需要以編程方式將它們合併在一起(Objective-C,iOS),但最終文件太大而無法保存在內存中,所以我無法使用AVFramework爲我執行此操作。合併MP4文件的MDAT原子

我已經編寫了代碼,它將根據各個MDATS的內容進行合併並處理所有MP4原子(STBL,STSZ,STCO等)。我遇到的問題是,在播放結果文件時,音頻逐漸與視頻不同步。似乎發生的情況是,每個文件中的音頻和視頻長度之間存在差異,這會導致我連接的文件越多,越糟糕。

我已經使用MP4Box從命令行生成一個文件,它與我的輸出「類似但不同」。一個顯着的不同是MDAT的長度發生了變化,並且塊偏移量也發生了變化(儘管樣本大小保持一致)。

我最近讀了AAC編碼在流的開始和結尾引入了填充,所以不知道這是我需要處理的事情。問:給定兩個包含H264編碼數據和AAC音頻的MDAT原子,是我的基本方法,還是需要以某種方式反思MDAT數據。

+0

因此,似乎這種方法不完全合理,但是由於採樣頻率之間的差異,每個MP4文件在音頻長度和視頻長度之間具有邊際差異。 MP4包含一個EDTS.ELST組合,可以解決該文件的這個問題。當我合併文件時,我沒有考慮EDTS。合併EDTS已修復問題 –

+0

您應該回答自己的問題並將其標記爲正確的問題。 –

回答

0

感謝指針尼爾斯

如此看來,該方法是完全合理的但是每一個人MP4文件具有音頻長度,由於採樣頻率之間的差異的視頻長度之間的邊際差異。 MP4包含一個EDTS.ELST組合,可以解決該文件的這個問題。當我合併文件時,我沒有考慮EDTS。合併EDTS已經解決了這個問題。