Сбой AVAssetExportSession на iPhone 3G, но не на iPhone 4 - PullRequest
12 голосов
/ 07 сентября 2011

Я конвертирую *.caf файл, используя AVAssetExportSession, он прекрасно работает на Симуляторе 4.0 и на моем тестовом устройстве iPhone 4.

К сожалению, на iPhone 3G всегда происходит сбой со следующей функцией:

AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:avAsset presetName:AVAssetExportPresetAppleM4A];

 if (exportSession == nil) {

      NSLog(@"no export session");

      return NO;

 }

 exportSession.outputURL = [NSURL fileURLWithPath:self.tempDir];

 exportSession.outputFileType = AVFileTypeAppleM4A;


 [exportSession exportAsynchronouslyWithCompletionHandler:^{



    if (AVAssetExportSessionStatusCompleted == exportSession.status) {

        NSLog(@"AVAssetExportSessionStatusCompleted");


 } else if (AVAssetExportSessionStatusFailed == exportSession.status) {

        // a failure may happen because of an event out of your control

        // for example, an interruption like a phone call comming in

        // make sure and handle this case appropriately

        NSLog(@"AVAssetExportSessionStatusFailed");

     NSLog(@"%@", [exportSession.error description]);

    } else {

        NSLog(@"Export Session Status: %d", exportSession.status);

    }

}];

Каждый раз выдается следующая ошибка.

Error Domain=AVFoundationErrorDomain Code=-11823 "Cannot Save" UserInfo=0x16fb20 {NSLocalizedRecoverySuggestion=Try saving again., NSLocalizedDescription=Cannot Save}

В чем может быть причина этого?

Ответы [ 2 ]

47 голосов
/ 15 марта 2012

11823 ошибка возникает, когда файл уже существует на пути, по которому вы пытаетесь сохранить файл

Поэтому вы должны удалить файл.

- (void) removeFile:(NSURL *)fileURL
{
    NSString *filePath = [fileURL path];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:filePath]) {
        NSError *error;
        if ([fileManager removeItemAtPath:filePath error:&error] == NO) {
            NSLog(@"removeItemAtPath %@ error:%@", filePath, error);
        }
    }
}
0 голосов
/ 07 сентября 2011

Скорее всего, устройству 3G не хватает аппаратных кодеков для соответствующего преобразования. Можете ли вы воспроизвести файл caf на 3G, чтобы проверить, может ли он декодировать его, и пытались ли вы преобразовать что-то простое, например, wav, чтобы доказать, что он может кодировать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...