2011-09-07 11 views
10

Im convirtiendo un archivo *.caf usando AVAssetExportSession funciona bastante bien en el simulador 4.0 y en mi dispositivo de prueba iPhone 4.AVAssetExportSession falla en iPhone 3G, pero no en iPhone 4

Lamentablemente siempre falla en un iPhone 3G con la siguiente función:

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); 

    } 

}]; 

El siguiente error es lanzada cada vez.

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

Cuál podría ser la razón de esto?

Respuesta

0

Lo más probable es que el dispositivo 3G carece de los códecs de hardware para hacer la transformación correspondiente. ¿Puedes jugar el archivo caf en el 3G para probar que puede decodificarlo, y has intentado convertir algo simple como un wav para demostrar que puede codificar?

+0

Puedo reproducir el archivo caf en el dispositivo. Usando 'exportPresetsCompatibleWithAsset' descubrí que solo el códec' AVAssetExportPresetAppleM4A' está disponible en iPhone 3G. Por lo tanto, mi configuración debe estar bien. –

+0

¿Puedes escribir un archivo en 'self.tempDir', y hay suficiente espacio allí para el tamaño esperado del archivo? –

+0

Sí, grabo el archivo en self.tempDir usando AVAudioRecorder antes de convertirlo. –

43

11823 error comes when file already exist en la ruta en la que está intentando guardar el archivo

Por lo que debe eliminar el archivo.

- (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); 
     } 
    } 
} 
Cuestiones relacionadas