Ошибка неправильного доступа к AVAssetExportSession при вызове exportAsynchronouslyWithCompletionHandler

#iphone #avfoundation #avassetexportsession

#iPhone #avfoundation #avassetexportsession

Вопрос:

Я пытаюсь обрезать видео, используя следующий код:

         AVURLAsset *videoAsset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/%@.mp4",documentsDirectory,name]] options:nil]; 


    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:videoAsset presetName:AVAssetExportPresetHighestQuality];
    NSURL *url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"%@/finalOutput.mp4",documentsDirectory]];
    exportSession.outputURL = url;

    NSLog(@"outputting to: %@", [NSString stringWithFormat:@"%@/finalOutput.mp4",documentsDirectory,name]);
    exportSession.outputFileType = AVFileTypeQuickTimeMovie;
    CMTimeRange timeRange = CMTimeRangeMake(flashbackStart, CMTimeSubtract(flashbackEnd, flashbackStart));
    exportSession.timeRange = timeRange;

    [exportSession exportAsynchronouslyWithCompletionHandler:^{
        switch (exportSession.status) {
            case AVAssetExportSessionStatusCompleted:
                // Custom method to import the Exported Video
                //[self loadAssetFromFile:exportSession.outputURL];
                NSLog(@"completed!!!");
                break;
            case AVAssetExportSessionStatusFailed:
                //
                NSLog(@"Failed:%@",exportSession.error);
                break;
            case AVAssetExportSessionStatusCancelled:
                //
                NSLog(@"Canceled:%@",exportSession.error);
                break;
            default:
                break;
        }
    }];
 

Тем не менее, я получаю ошибку неправильного доступа для этой строки:

 [exportSession exportAsynchronouslyWithCompletionHandler:^{
 

Даже при включенном NSZombie я не получаю никаких подробностей об ошибке. Кто-нибудь может объяснить, что здесь происходит? Входной видеофайл существует, а выходной видеофайл не существует до того, как я попытаюсь выполнить запись в него.

Спасибо, Джеймс

Ответ №1:

Оказывается, проблема была в NSURL s, которые я использовал. Все, что мне нужно было сделать, это использовать initFileURLWithPath , и проблема была решена!

Ответ №2:

Возможно, у вас возникла проблема с типом хранилища. Попробуйте добавить __block к вашей exportSession.

 __block AVAssetExportSession *exportSession...
 

Вы можете прочитать больше здесь:

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Blocks/Articles/bxGettingStarted.html#//apple_ref/doc/uid/TP40007502-CH7-SW5

Комментарии:

1. Спасибо за ответ, но это ничего не изменило.

2. Вы выпускаете exportSession после этого кода в вопросе?