2010-10-23 3 views
1

J'essaie d'ajouter un fichier .mp3 à un AVMutableCompositionTrack et après je veux exporter le nouveau fichier. Le problème est: Le fichier généré existe après l'exportation mais il est vide et ne peut pas être lu. Est-ce que quelqu'un voit l'erreur dans mon code?AVAssetExportSession - AVMutableCompositionTrack - le fichier de sortie exporté est vide

AVMutableComposition *saveComposition = [AVMutableComposition composition]; 
NSArray *docpaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *tempPath = [docpaths objectAtIndex:0]; 

NSLog(@"Temporary Path: %@", tempPath); 

NSString *audioPath = [[NSBundle mainBundle] pathForResource: @"1" ofType: @"mp3"]; 
NSURL *audioUrl = [[NSURL alloc] initFileURLWithPath:audioPath]; 
AVURLAsset *audio = [AVURLAsset URLAssetWithURL:audioUrl options:nil]; 
NSLog(@"%@", audio); 
[audioUrl release]; 
AVMutableCompositionTrack *compositionAudioTrack = [saveComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 
AVAssetTrack *clipAudioTrack = [[audio tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]; 

[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [audio duration]) ofTrack:clipAudioTrack atTime:kCMTimeZero error:nil]; 

NSString *path = [tempPath stringByAppendingPathComponent:@"mergedaudio.m4a"]; 
if([[NSFileManager defaultManager] fileExistsAtPath:path]) 
{ 
    [[NSFileManager defaultManager] removeItemAtPath:path error:nil]; 
} 
NSURL *url = [[NSURL alloc] initFileURLWithPath: path]; 

AVAssetExportSession *exporter = [[[AVAssetExportSession alloc] initWithAsset:saveComposition presetName:AVAssetExportPresetAppleM4A] autorelease]; 
exporter.outputURL=url; 
[exporter setOutputFileType:@"com.apple.m4a-audio"]; 

NSLog(@"%@", [exporter supportedFileTypes]); 
exporter.outputFileType=[[exporter supportedFileTypes] objectAtIndex:0]; 

[exporter exportAsynchronouslyWithCompletionHandler:^{ 

}]; 

Merci d'avance!

+0

Aha, ça a quelque chose à voir avec les formats de fichiers utilisés. Si je fais tout (fichier source, fichier cible, toutes définitions de type) par exemple. Format WAV, alors ça marche! Avoir à essayer plus et affichera les résultats ... – Micko

Répondre

2

Comme je l'ai écrit dans les commentaires, il avait quelque chose à voir avec les différents formats de fichiers. J'ai changé mes fichiers en .m4a et aussi le code - donc tout (les sources et les cibles de cette opération) est .m4a lié et ça marche. Au fait: j'ai essayé aussi de travailler avec des fichiers .wav, mais il y a des choses étranges qui se passent pendant les opérations avec wav. Je ne le recommande pas.

+0

je veux conserver les données de la chanson dans Nsdata pour le téléchargement sur le serveur pouvez-vous aider .. ?? – GhostRider

+1

désolé, je n'ai jamais travaillé avec NSData ou des connexions de serveur ... – Micko

Questions connexes