2010-08-21 6 views
0

아마도 iOS 4 SDK에서는 사용자의 iTunes 보관함을 편집하고 쓸 수 있습니다. 내 아이폰/아이팟 라이브러리에서 성공적으로 AVAsset을로드 할 수 있지만 빠른 테스트로 AVAssetExportSession을 사용하여 바로 동일한 파일을 덮어 쓰려고하는데 항상 상태 "4"를 반환합니다. 생각하다은 AVAssetExportSessionStatusFailed입니다. .AVAssetExportSession을 사용하여 iPhone/iPod 라이브러리의 노래를 덮어 쓸 수 있습니까?


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

을하지만 AVAssetExportSession.h에 말한다 : 문서에서는 말한다



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

: 여기

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

내가 사용하고 코드입니다

어느 쪽이든 ... 나는 그것이 "실패"했거나 "취소 된 것"이라고 생각합니다. 다른 사람이 이전에 미디어 라이브러리에 성공적으로 기록 했습니까?

감사합니다.

+0

if (exportSession.status == AVAssetExportSessionStatusFailed) NSLog (@ "failed"); if (exportSession.status == AVAssetExportSessionStatusCancelled) NSLog (@ "cancelled"); 정말로 덮어 쓸 수 있습니까? – Thomas

+0

또한 NSLog (@ "ExportSessionError : % @", exportSession.error);가 도움이됩니다. – Thomas

+0

감사합니다. 실패한 것처럼 보입니다. 그래서 그것은 전투의 절반입니다. 다른 절반은 이유를 알아 내고 있습니다! :) 사용자 dir에 새 파일을 저장 한 다음 asset.URL url에 직접 쓰는 대신 라이브러리에 추가 할 수있는 방법이 있는지 궁금합니다. 흠 ... – taber

답변

2

당신은 itunes 라이브러리에 쓸 수 없으며 지금부터 만 읽을 수 있습니다.

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

코드를 보내 주셔서 감사합니다. 미안하지만 더 명확하지 않았습니다. 오디오 파일을 사용자의 음악 라이브러리에 쓰고 싶습니다. – taber

관련 문제