AVAssetExportSession не работает на iPhone 3G - но не на iPhone 4
Im конвертируя файл *.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}
Что может быть причиной этого?
Ответы
Ответ 1
Ошибка 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);
}
}
}
Ответ 2
Скорее всего, устройству 3G не хватает аппаратных кодеков для выполнения соответствующего преобразования. Можете ли вы воспроизвести файл caf на 3G, чтобы проверить, может ли он его декодировать, и попробовали ли вы конвертировать что-то простое, например wav, чтобы доказать, что он может кодировать?