I am now trying to export an mp3 file that has been player using AVPlayer (using an url) so it doesn't have to be downloaded twice.
This is my sample code:
I've tried every outputFileType...
self.exporter = [[AVAssetExportSession alloc] initWithAsset:self.asset presetName:AVAssetExportPresetPassthrough];
}
NSError *error;
NSLog(@"export.supportedFileTypes : %@",self.exporter.supportedFileTypes);
// "com.apple.quicktime-movie",
// "com.apple.m4a-audio",
// "public.mpeg-4",
// "com.apple.m4v-video",
// "public.3gpp",
// "org.3gpp.adaptive-multi-rate-audio",
// "com.microsoft.waveform-audio",
// "public.aiff-audio",
// "public.aifc-audio",
// "com.apple.coreaudio-format"
self.exporter.outputFileType = @"public.aiff-audio";
self.exporter.shouldOptimizeForNetworkUse = YES;
NSURL *a = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&error];
NSURL *url = [a URLByAppendingPathComponent:@"filename.mp3"];
NSString *filePath = [url absoluteString];
self.exporter.outputURL = url;
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]){
[self.exporter exportAsynchronouslyWithCompletionHandler:^{
if (self.exporter.status == AVAssetExportSessionStatusCompleted)
{
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]){
NSLog(@"File doesn't exist at path");
}else {
NSLog@"File saved!");
}
}
else if(self.exporter.status == AVAssetExportSessionStatusFailed){
NSLog(@"Failed");
}else if(self.exporter.status == AVAssetExportSessionStatusUnknown){
NSLog(@"Unknown");
}else if(self.exporter.status == AVAssetExportSessionStatusCancelled){
NSLog(@"Cancelled");
}else if(self.exporter.status == AVAssetExportSessionStatusWaiting){
NSLog(@"Waiting");
}else if(self.exporter.status == AVAssetExportSessionStatusExporting){
NSLog(@"Exporting");
}
NSLog(@"Exporter error! : %@",self.exporter.error);
}];
}}else{
NSLog(@"File already exists at path");
}
If this is not possible to accomplish, is there any work around?
Also, as I can change the format of the audio file. What's the ideal type to work with AVAudioPlayer?
I tried to export audio file with mp3 format from ipod library. and this is my solution below.
}
It appears
AVAssetExportSession
only supports filetypes for mp3 transcoding with com.apple.quicktime-movie (.mov) and com.apple.coreaudio-format (.caf) using theAVAssetExportPresetPassthrough
preset. You must also be sure to use one of these file extensions when writing your output file otherwise it won't save.Supported output filetype and extensions for an mp3 input file are in bold (tested on OS X 10.11.6):
If you don't mind performing a proper transcode of the audio data to another format, then you don't have to use the
AVAssetExportPresetPassthrough
preset. There are alsoAVAssetExportPresetLowQuality
,AVAssetExportPresetMediumQuality
, andAVAssetExportPresetHighestQuality
. In the sample code that follows, the output URL has extension .m4a and the resulting transcode plays in iTunes and other media players: