Tôi đang cố hợp nhất một số tệp âm thanh (được chọn qua MPMediaPickerController), nhưng việc xuất luôn không thành công với mã lỗi -12780.AVAssetExportSession không thành công mỗi lần (lỗi -12780)
Khi tôi cố gắng phát sáng tác phẩm của mình bằng đối tượng AVPlayer, nó phát chính xác. Chỉ xuất không thành công.
Tôi đang làm gì sai?
Đây là mã của tôi:
AVAssetExportSession *exportSession;
AVPlayer *player;
- (void)mergeAudiofiles {
// self.mediaItems is an NSArray of MPMediaItems
if (self.mediaItems.count == 0) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"No Tracks selected."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
return;
}
// Configure audio session
NSError *sessionError;
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryAudioProcessing error:nil];
[session setActive:YES error:&sessionError];
if (sessionError) NSLog(@"Session-Error: %@", sessionError.localizedDescription);
// Create composition
AVMutableComposition *composition = [AVMutableComposition composition];
AVMutableCompositionTrack *track = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
CMTime position = kCMTimeZero;
for (MPMediaItem *item in self.mediaItems) {
NSURL *assetURL = [item valueForProperty:MPMediaItemPropertyAssetURL];
AVAsset *asset = [AVAsset assetWithURL:assetURL];
CMTimeRange duration = CMTimeRangeMake(kCMTimeZero, asset.duration);
// duration = CMTimeRangeMake(kCMTimeZero, CMTimeMake(5, 1)); // For player test
NSError *error;
[track insertTimeRange:duration ofTrack:[[asset tracksWithMediaType:AVMediaTypeAudio] lastObject] atTime:position error:&error];
if (error) NSLog(@"ERROR! :(");
position = CMTimeAdd(position, duration.duration);
}
// Path to output file
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSURL *exportUrl = [NSURL URLWithString:[documentsDirectory stringByAppendingPathComponent:@"export.m4a"]];
NSLog(@"Export URL = %@", exportUrl.description);
// Playing works!
// """"""""""""""
// AVPlayerItem *pitem = [[AVPlayerItem alloc] initWithAsset:composition];
// player = [[AVPlayer alloc] initWithPlayerItem:pitem];
// [player play];
//
// return;
// Export
exportSession = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetAppleM4A];
exportSession.outputURL = exportUrl;
exportSession.outputFileType = AVFileTypeAppleM4A;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch (exportSession.status) {
case AVAssetExportSessionStatusFailed:
NSLog(@"Export failed -> Reason: %@, User Info: %@",
exportSession.error.localizedDescription,
exportSession.error.userInfo.description);
break;
case AVAssetExportSessionStatusCancelled:
NSLog(@"Export cancelled");
break;
case AVAssetExportSessionStatusCompleted:
NSLog(@"Export finished");
break;
default:
break;
}
}];
}
cảm ơn. Tôi đã gần như mất đi những gì còn lại của sự tỉnh táo của tôi! – GreatWiz
đã lưu ngày của tôi ... cảm ơn +1 – Vats
omg, bạn đã cứu mạng tôi. Cảm ơn nhiều! – Tien