2011-07-05 1 views
1

Я боролся с добавлением активов из библиотеки фотографий iPhone в AVMutableComposition, а затем экспортировал их. Вот что я получил:Найдите активы в библиотеке - добавьте в AVMutableComposition - export = crash

Поиск активов: (здесь я захватить AVURLAsset)

-(void) findAssets { 

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 

// Enumerate just the photos and videos group by using ALAssetsGroupSavedPhotos. 
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 

    // Within the group enumeration block, filter to enumerate just videos. 
    [group setAssetsFilter:[ALAssetsFilter allVideos]]; 
    [group enumerateAssetsUsingBlock:^(ALAsset *alAsset, NSUInteger index, BOOL *innerStop){ 

     // The end of the enumeration is signaled by asset == nil. 
     if (alAsset) { 
      ALAssetRepresentation *representation = [alAsset defaultRepresentation]; 
      NSURL *url = [representation url]; 
      AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil]; 
      // Do something interesting with the AV asset. 

      [thumbs addObject:alAsset]; 
      [assets addObject:avAsset]; 
     }else if(alAsset == nil){ 
      [self createScroll]; 
     } 
    }]; 
} 
        failureBlock: ^(NSError *error) { 
         // Typically you should handle an error more gracefully than this. 
         NSLog(@"No groups"); 
        }]; 
[library release]; 

}

Здесь я добавить актив в моей композиции (я использую первый объект в массиве только для тестирования.

-(void) addToCompositionWithAsset:(AVURLAsset*)_asset{ 
NSError *editError = nil; 
composition = [AVMutableComposition composition]; 
AVURLAsset* sourceAsset = [assets objectAtIndex:0]; 

Float64 inSeconds = 1.0; 
Float64 outSeconds = 2.0; 
// calculate time 
CMTime inTime = CMTimeMakeWithSeconds(inSeconds, 600); 
CMTime outTime = CMTimeMakeWithSeconds(outSeconds, 600); 
CMTime duration = CMTimeSubtract(outTime, inTime); 
CMTimeRange editRange = CMTimeRangeMake(inTime, duration); 
[composition insertTimeRange:editRange ofAsset:sourceAsset atTime:composition.duration error:&editError]; 

if (!editError) { 
    CMTimeGetSeconds (composition.duration); 
} 

} И, наконец, я экспортировать комп и вот он выходит из строя

-(void)exportComposition { 
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetPassthrough]; 

NSLog (@"can export: %@", exportSession.supportedFileTypes); 

NSArray *dirs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectoryPath = [dirs objectAtIndex:0]; 
NSString *exportPath = [documentsDirectoryPath stringByAppendingPathComponent:EXPORT_NAME]; 

[[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil]; 
NSURL *exportURL = [NSURL fileURLWithPath:exportPath]; 

exportSession.outputURL = exportURL; 
exportSession.outputFileType = AVFileTypeQuickTimeMovie;//@"com.apple.quicktime-movie"; 

[exportSession exportAsynchronouslyWithCompletionHandler:^{ 
    NSLog (@"i is in your block, exportin. status is %d", 
      exportSession.status); 
    switch (exportSession.status) { 
     case AVAssetExportSessionStatusFailed: 
     case AVAssetExportSessionStatusCompleted: { 
      [self performSelectorOnMainThread:@selector (exportDone:) 
            withObject:nil 
           waitUntilDone:NO]; 
      break; 
     } 
    }; 
}]; 

}

Кто-нибудь есть идея о том, что это может быть? Это падает на

AVAssetExportSession * exportSession = [[AVAssetExportSession Alloc] initWithAsset: Состав presetName: AVAssetExportPresetPassthrough];

И я пробовал разные пресеты и outputFileTypes.

Благодаря

* решаемые *

ответ

2

я должен ответить на свой вопрос сейчас, когда я решил. Удивительно, что я боролся с этим в течение целого дня, а затем исправить его сразу после размещения вопроса :)

Я изменил и переехал:

состава = [AVMutableComposition композиции];

к:

композиции = [[AVMutableComposition Alloc] инициализации];

Я думаю, что слишком устал, когда работал над этим вчера. Спасибо, парни!