2013-06-12 45 views
1

我試圖merge.mp4和文件的.caf所以我用下面的代碼,與AVMutableComposition視頻製作問題

AVMutableCompositionTrack *compositionVideoTrack = 
[mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo 
          preferredTrackID:kCMPersistentTrackID_Invalid]; 
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) 
           ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] 
                   atTime:kCMTimeZero 
                    error:nil]; 

,但我得到的錯誤

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array' *** First throw call stack: (0x32c4d2a3 0x3aae397f 0x32b98b75 0x748e7 0x74e61 0x34b400c5 0x34b40077 0x34b40055 0x34b3f90b 0x34b3fe01 0x34a685f1 0x34a55801 0x34a5511b 0x367495a3 0x32c22683 0x32c21ee9 0x32c20cb7 0x32b93ebd 0x32b93d49 0x367482eb 0x34aa9301 0x6f767 0x6f708) libc++abi.dylib: terminate called throwing an exception


都需要框架和.dylib文件包括在內。

+2

可能是因爲問題[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] ... [videoAsset tracksWithMediaType:AVMediaTypeVideo]可能返回nil。檢查 – iCoder

回答

2

打印您的數組數量。它必須是一個空陣列,這就是爲什麼你的應用程序崩潰。檢查一下。 NSlog(@"array count => %d",[videoAsset tracksWithMediaType:AVMediaTypeVideo]);

並用下面的代碼替換您的代碼以防止崩潰。

AVMutableCompositionTrack *compositionVideoTrack = 
    [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo 
           preferredTrackID:kCMPersistentTrackID_Invalid]; 
    NSArray *dataSourceArray = [NSArray arrayWithArray: [videoAsset tracksWithMediaType:AVMediaTypeVideo]; 
    NSlog(@"array count => %d",[dataSourceArray count]); 
    [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) 
            ofTrack:([dataSourceArray count]>0)?[dataSourceArray objectAtIndex:0]:nil 
                    atTime:kCMTimeZero 
                     error:nil]; 
+0

感謝代碼工作...沒有任何錯誤。 –

+0

@ utkal welcome :) – Divyu

+0

如果'dataSourceArray'爲空,我該如何創建視頻? –