2010-08-21 13 views
0

Donc soi-disant dans le SDK iOS 4, vous pouvez modifier et écrire dans la bibliothèque iTunes de l'utilisateur. Je peux charger avec succès un AVAsset à partir de ma bibliothèque iPhone/iPod, mais comme un test rapide, j'essaye juste d'écraser le même fichier tout de suite en utilisant AVAssetExportSession mais il retourne toujours le statut "4" dont THINK est AVAssetExportSessionStatusFailed .. . dans la documentation, il dit:Comment puis-je utiliser AVAssetExportSession pour remplacer des morceaux de ma bibliothèque iPhone/iPod?


enum { 
    AVAssetExportSessionStatusUnknown, 
    AVAssetExportSessionStatusExporting, 
    AVAssetExportSessionStatusCompleted, 
    AVAssetExportSessionStatusFailed, 
    AVAssetExportSessionStatusCancelled, 
    AVAssetExportSessionStatusWaiting 
}; 

mais AVAssetExportSession.h il dit:


enum { 
    AVAssetExportSessionStatusUnknown, 
    AVAssetExportSessionStatusWaiting, 
    AVAssetExportSessionStatusExporting, 
    AVAssetExportSessionStatusCompleted, 
    AVAssetExportSessionStatusFailed, 
    AVAssetExportSessionStatusCancelled 
}; 
typedef NSInteger AVAssetExportSessionStatus; 

Voici le code que je utilise:



// before this, i'm using mpmediapicker to pick an m4a file i synched with my itunes library 

NSURL *assetUrl = [[self.userMediaItemCollection.items objectAtIndex: 0] valueForProperty: MPMediaItemPropertyAssetURL]; 
AVURLAsset *asset = [AVURLAsset URLAssetWithURL: assetUrl options: nil]; 
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset: asset presetName: AVAssetExportPresetAppleM4A]; 
exportSession.outputURL = asset.URL; 
exportSession.outputFileType = AVFileTypeAppleM4A; 

NSLog(@"output filetype: %@", exportSession.outputFileType); 
// prints "com.apple.m4a-audio" 

[exportSession exportAsynchronouslyWithCompletionHandler: ^(void) { 
    NSLog(@"status: %i for %@", exportSession.status, exportSession.outputURL); 
    // prints "status: 4 for ipod-library://item/item.m4a?id=3631988601206299774" 
}]; 

[exportSession release]; 

Donc de toute façon ... je suppose que c'est "échoué" ou "annulé". Est-ce que quelqu'un d'autre a déjà écrit avec succès dans la médiathèque?

Merci!

+0

si (exportSession.status == AVAssetExportSessionStatusFailed) NSLog (@ "failed"); if (exportSession.status == AVAssetExportSessionStatusCancelled) NSLog (@ "annulé"); Etes-vous sûr de pouvoir l'écraser? – Thomas

+0

Aussi 'NSLog (@" ExportSessionError:% @ ", exportSession.error);' devrait aider. – Thomas

+0

merci, il semble que ça ne marche pas. c'est donc la moitié de la bataille. l'autre moitié découvre pourquoi! :) Je me demande s'il existe un moyen de sauvegarder un nouveau fichier dans le répertoire utilisateur et de l'ajouter à la bibliothèque au lieu d'écrire directement dans l'URL asset.URL. hmm ... – taber

Répondre

2

vous ne pouvez pas écrire dans la bibliothèque itunes, lisez-la seulement maintenant.

0
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
NSParameterAssert(library); 
if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:[NSURL  fileURLWithPath:movieFileName]]) { 
   [library writeVideoAtPathToSavedPhotosAlbum:[NSURL fileURLWithPath:movieFileName]  completionBlock:^(NSURL *assetURL, NSError *error){}]; 
} 
[library release]; 
+0

Merci pour le code, désolé je n'étais pas plus clair: je voudrais écrire des fichiers audio dans la bibliothèque musicale de l'utilisateur. – taber