ios - name - web app iphone
AVAssetExport falla para algunos archivos (4)
Habiendo jugado mucho con esto, algunas de las respuestas pueden ser relevantes y correctas. Otra cosa a tener en cuenta es que a menudo solía obtener errores AVFoundation
similares si intentaba combinar videos que tenían diferentes tasas de fotogramas. Compruebe la velocidad de fotogramas de los archivos de origen y también los de CMTime
. Es posible que deba preprocesar algunos archivos antes de agregarlos a AVMutableComposition
.
He intentado exportar un archivo de audio desde la biblioteca del iPod. Mi objetivo es crear un nuevo archivo en la carpeta de documentos de la aplicación con este archivo de la biblioteca del iPod. No se pueden crear archivos solo para algunos elementos. A continuación se muestra mi fragmento de código.
AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL: url options:nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
AVAssetExportSession *exporter = [[AVAssetExportSession alloc]
initWithAsset: songAsset
presetName: AVAssetExportPresetAppleM4A];
exporter.outputFileType = @"com.apple.m4a-audio";
NSString *songName = [filename stringByAppendingString:@".m4a"];
NSString *musicfilepath = [documentsDirectory stringByAppendingPathComponent:@"musics/"];
[[NSFileManager defaultManager] createDirectoryAtPath:musicfilepath withIntermediateDirectories:YES attributes:nil error:nil];
NSString *exportFile = [musicfilepath stringByAppendingPathComponent:songName];
NSError *error1;
if([[NSFileManager defaultManager] fileExistsAtPath:exportFile])
{
[[NSFileManager defaultManager] removeItemAtPath:exportFile error:&error1];
}
NSURL* exportURL = [[NSURL fileURLWithPath:exportFile] retain];
exporter.outputURL = exportURL;
Estoy obteniendo un error como se muestra a continuación cuando se intenta con el bloqueo del controlador de errores:
[exporter exportAsynchronouslyWithCompletionHandler:^{
int exportStatus = exporter.status;
switch (exportStatus) {
case AVAssetExportSessionStatusFailed: {
NSError *exportError = exporter.error;
NSLog (@"AVAssetExportSessionStatusFailed: %@", exportError);
break;
}
}
}];
AVAssetExportSessionStatusFailed: Error Domain = AVFoundationErrorDomain Code = -11800 "No se pudo completar la operación" UserInfo = 0x214f20 {NSLocalizedFailureReason = Ocurrió un error desconocido (-12124), NSUnderlyingError = 0x218270 "La operación no se ha realizado ningún detalle. .) ", NSLocalizedDescription = No se pudo completar la operación}
La ruta del archivo de música que está utilizando puede estar equivocada. Prueba esto
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@"Music"];
NSError* error;
if (![[NSFileManager defaultManager] fileExistsAtPath:documentsDirectory])
[[NSFileManager defaultManager] createDirectoryAtPath:documentsDirectory withIntermediateDirectories:NO attributes:nil error:&error];
NSString *exportFile = [documentsDirectory stringByAppendingPathComponent:songName];
if([[NSFileManager defaultManager] fileExistsAtPath:exportFile])
{
[[NSFileManager defaultManager] removeItemAtPath:exportFile error:&error1];
}
if (error != nil) {
NSURL* exportURL = [[NSURL fileURLWithPath:exportFile] retain];
exporter.outputURL = exportURL;
[exporter exportAsynchronouslyWithCompletionHandler:^{
int exportStatus = exporter.status;
switch (exportStatus) {
case AVAssetExportSessionStatusFailed: {
NSError *exportError = exporter.error;
NSLog (@"AVAssetExportSessionStatusFailed: %@", exportError);
break;
}
}
}
];
}
Si tiene iTunes activado y el archivo no se descarga en el dispositivo, esto puede suceder. ¿Puedes verificar si ese es el caso para ti? Si es así puedo dar el código para detectarlo.
+ (BOOL)isDownloadedFromiCloud:(MPMediaItem *)item {
if ([item valueForProperty:MPMediaItemPropertyAssetURL] != nil) {
AVURLAsset *asset = [AVURLAsset assetWithURL:[item valueForProperty:MPMediaItemPropertyAssetURL]];
if (asset.exportable)
return YES;
}
return NO;
}
Yo también he experimentado esto. ¿Estás utilizando iTunes match? Puede ser que el archivo no esté en el dispositivo real. Puede verificar esto en el AVAsset verificando las propiedades como hasProtectedContent
o asegurándose de que exportable
sea YES
.
Además, AVExportSession
que está utilizando el preajuste AVAssetExportPresetAppleM4A''. This will re-encode the file you are exporting. It may be easier (and much faster) to just pass-though instead using
AVAssetExportPresetAppleM4A''. This will re-encode the file you are exporting. It may be easier (and much faster) to just pass-though instead using
AVAssetExportPresetAppleM4A''. This will re-encode the file you are exporting. It may be easier (and much faster) to just pass-though instead using
AVAssetExportPresetPassthrough`. Esto supone que está satisfecho con el formato de archivo existente, que tal vez .m4a, .mp3, .wav, etc.