2012-03-30 32 views
7

Tôi đang cố gắng hợp nhất (nối thêm) 3 video bằng AVAssetExportSession, nhưng tôi vẫn gặp phải lỗi này. Kỳ lạ cho 1 hoặc 2 video nó hoạt động.iOS 5: Lỗi khi hợp nhất 3 video với AVAssetExportSession

Error Domain=AVFoundationErrorDomain Code=-11820 "Cannot Complete Export" UserInfo=0x458120 {NSLocalizedRecoverySuggestion=Try exporting again., NSLocalizedDescription=Cannot Complete Export} 

Tôi thậm chí đã cố gắng làm lại chức năng trong trường hợp lỗi nhưng những gì tôi nhận được chỉ là thông báo lỗi vô hạn. Đây là đoạn mã của tôi.

AVMutableComposition *mixComposition = [AVMutableComposition composition]; 
AVMutableCompositionTrack *compositionTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 
NSError * error = nil; 
NSMutableArray * timeRanges = [NSMutableArray arrayWithCapacity:arrayMovieUrl.count]; 
NSMutableArray * tracks = [NSMutableArray arrayWithCapacity:arrayMovieUrl.count]; 

for (int i=0; i<[arrayMovieUrl count]; i++) { 
    AVURLAsset *assetClip = [arrayMovieUrl objectAtIndex:i]; 
    AVAssetTrack *clipVideoTrackB = [[assetClip tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 

    [timeRanges addObject:[NSValue valueWithCMTimeRange:CMTimeRangeMake(kCMTimeZero, assetClip.duration)]]; 
    [tracks addObject:clipVideoTrackB]; 
} 
[compositionTrack insertTimeRanges:timeRanges ofTracks:tracks atTime:kCMTimeZero error:&error]; 

AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPreset1280x720]; 
NSParameterAssert(exporter != nil); 
exporter.outputFileType = AVFileTypeQuickTimeMovie; 
exporter.outputURL = outputUrl; 
[exporter exportAsynchronouslyWithCompletionHandler:^{ 
    switch ([exporter status]) { 
     case AVAssetExportSessionStatusFailed: 
      NSLog(@"Export failed: %@", [exporter error]); 
      break; 
     case AVAssetExportSessionStatusCancelled: 
      NSLog(@"Export canceled"); 
      break; 
     case AVAssetExportSessionStatusCompleted: 
      NSLog(@"Export successfully"); 
      break; 
     default: 
      break; 
    } 
    if (exporter.status != AVAssetExportSessionStatusCompleted){ 
     NSLog(@"Retry export"); 
     [self renderMovie]; 
    } 
}]; 

Có vấn đề gì với mã của tôi hoặc iOS 5 có lỗi không?

Trả lời

5

Tôi đã tìm thấy sự cố. Vì vậy, vấn đề thực sự là vì tôi sử dụng AVPlayerLayer để hiển thị từng video ở chế độ xem trước cùng một lúc. Đề cập đến câu hỏi này AVPlayerItem fails with AVStatusFailed and error code "Cannot Decode", có giới hạn không có giấy tờ của tối đa 4 AVPlayer đồng thời hoạt động. Và giới hạn này bằng cách nào đó cản trở AVAssetExportSession không hoạt động khi có 4 phiên bản AVPlayer tại thời điểm đó.

Giải pháp là giải phóng AVPlayer trước khi xuất hoặc không sử dụng AVPlayer hoàn toàn.

+0

bạn cũng có thể khởi tạo nhà xuất bản bằng bản sao của thành phần có thể thay đổi thay vì – Edwin

+0

Cách phát hành AVPlayer trong mục tiêu xcode 8.2.1? – sohil

Các vấn đề liên quan