2014-04-02 46 views
1

我有兩個MP4文件,比方說,編程串連MP4文件

  1. MP4(20秒)和
  2. MP4(20秒);

都是由同一個應用程序生成的。我想以編程方式連接它們。我已閱讀ISO/IEC 14496-12文檔並搜索了一些可能的答案,但只有少數幾個。

從我至今讀,可以將文件,如果我的串聯部分MDAT和合並STBL盒如STTS,STSS,科技小組,STSZ,STCO等

我的元素連接起來已經嘗試過使用上面提到的策略,我編輯了MVHD和MDHD中的持續時間部分,並將其他框連接起來並作爲新的mp4文件輸出。

MDAT part of 1.mp4 -- MDAT part of 2.mp4 -- MOOV box (MOOV, MVHD, TRAK, MDIA, STBL, etc) 

裏面STBL盒,我在兩個文件並置的元素,我使用的音頻和視頻部分相同的結構:

STTS(1.mp4) -- STTS(2.mp4) -- STSS(1.mp4) -- STSS(2.mp4) -- STSC(1.mp4) -- STSC(2.mp4) -- STSZ(1.mp4) -- STSZ(2.mp4) -- STCO(1.mp4) -- STCO(2.mp4) 

但是,輸出文件無法播放或打開。

如果我只是會連接起來的兩個文件的TRAK盒,如:

MOOV (MVHD -- TRAK (and all other boxes of 1.mp4) -- TRAK (and all other boxes of 1.mp4)) 

我可以輸出文件播放,但持續時間保持不變的1.mp4 ...

關於哪些部分我應該編輯的任何建議或具體示例?

謝謝。

回答

3

首先,要以編程方式連接2個mp4文件,您需要確保兩個文件包含相同的音頻和視頻編解碼器。

您需要檢查音軌和視頻軌道並比較編解碼器類型。例如,如果一個文件視頻編解碼器是H.264而另一個文件視頻編解碼器是H.263,那麼這兩個不能級聯。音軌也可能有不同的編解碼器(例如amr,aac)。

既然你寫過這兩個文件都是用同一個應用程序創建的,那麼假定兩個文件都使用相同的音頻和視頻編解碼器可能沒問題。 爲了連接它們,確實可以將第二個文件的mdat原子數據連接到第一個文件的原子數據mdat。然後mdat原子大小應該更新以表示原子大小的總和mdat

至於其他原子,沒有簡單的方法來處理它們。例如,對於代表塊偏移的stco原子,您需要添加第二個文件音頻/視頻樣本的所有偏移量(每個音頻/視頻軌道有一個stco原子)。然而,這些音頻/視頻樣本添加到第一個文件時會更改它們的偏移量,因此您需要計算每個塊的新偏移量。其他原子也需要改變。例如其中包含樣本數量及其大小的stsz

stss原子中,您需要更新關鍵幀的總數並添加所有第二個文件關鍵幀,但是第二個文件的每個樣本編號都必須更改(您需要添加它第一個文件的關鍵幀的數量)。

您需要閱讀ISO/IEC 14496-12文檔並根據規範處理每個原子。