如何使用AVAssetExportSession覆盖iPhone/iPod库中的歌曲?

如何使用AVAssetExportSession覆盖iPhone/iPod库中的歌曲?,iphone,file-io,ios4,iphone-4,mpmediaitemcollection,Iphone,File Io,Ios4,Iphone 4,Mpmediaitemcollection,因此,在iOS 4 SDK中,您可以编辑和写入用户的iTunes库。我可以成功地从我的iPhone/iPod库加载AVAsset,但作为一个快速测试,我试图立即使用AVAssetExportSession覆盖同一个文件,但它总是返回状态“4”,我认为它是AVAssetExportSessionStatusFailed。。。文件中说: enum { AVAssetExportSessionStatusUnknown, AVAssetExportSessionStatusExpor

因此,在iOS 4 SDK中,您可以编辑和写入用户的iTunes库。我可以成功地从我的iPhone/iPod库加载AVAsset,但作为一个快速测试,我试图立即使用AVAssetExportSession覆盖同一个文件,但它总是返回状态“4”,我认为它是AVAssetExportSessionStatusFailed。。。文件中说:


enum {
    AVAssetExportSessionStatusUnknown,
    AVAssetExportSessionStatusExporting,
    AVAssetExportSessionStatusCompleted,
    AVAssetExportSessionStatusFailed,
    AVAssetExportSessionStatusCancelled,
    AVAssetExportSessionStatusWaiting
};
但在AVAssetExportSession.h中,它说:


enum {
    AVAssetExportSessionStatusUnknown,
    AVAssetExportSessionStatusWaiting,
    AVAssetExportSessionStatusExporting,
    AVAssetExportSessionStatusCompleted,
    AVAssetExportSessionStatusFailed,
    AVAssetExportSessionStatusCancelled
};
typedef NSInteger AVAssetExportSessionStatus;
以下是我使用的代码:



// 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];

所以不管怎样。。。我猜是“失败”或“取消”。以前有人成功写入媒体库吗


谢谢

您无法写入itunes库,现在只能从中读取。

如果(exportSession.status==AVAssetExportSessionStatusFailed)NSLog(@“failed”);如果(exportSession.status==AVAssetExportSessionStatusCancelled)NSLog(@“已取消”);是否确实允许覆盖?另请参见
NSLog(@“ExportSessionError:%@”,exportSession.error)应该有帮助。谢谢,看起来好像失败了。这就是战斗的一半。另一半正在找出原因!:)我想知道是否有办法将新文件保存到user dir,然后将其添加到库中,而不是直接写入asset.URL。嗯,
NSLog(@“ExportSessionError:%@,[exportSession.error localizedDescription])
说什么?ExportSessionError:操作无法完成。(AVFoundationErrorDomain错误-11800。):(感谢您提供的代码,很抱歉我没有说得更清楚:我想将音频文件写入用户的音乐库。
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];