问题描述
我现在正在尝试导出一个使用AVPlayer(使用网址)播放器的mp3文件,因此不必下载两次。
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.
这是我的示例代码:
我已尝试过每个outputFileType ...
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?
另外,因为我可以改变音频文件的格式。什么是使用AVAudioPlayer的理想类型?
Also, as I can change the format of the audio file. What's the ideal type to work with AVAudioPlayer?
推荐答案
它出现 AVAssetExportSession
仅使用<$ c $支持使用 com.apple.quicktime-movie (。mov)和 com.apple.coreaudio-format (.caf)进行mp3转码的文件类型c> AVAssetExportPresetPassthrough 预设。在编写输出文件时,您还必须确保使用其中一个文件扩展名,否则将无法保存。
It appears AVAssetExportSession
only supports filetypes for mp3 transcoding with com.apple.quicktime-movie (.mov) and com.apple.coreaudio-format (.caf) using the AVAssetExportPresetPassthrough
preset. You must also be sure to use one of these file extensions when writing your output file otherwise it won't save.
支持的输出文件类型和mp3输入文件的扩展名为粗体(在OS X 10.11.6上测试):
Supported output filetype and extensions for an mp3 input file are in bold (tested on OS X 10.11.6):
- com.apple.quicktime-movie(.mov)
- com.apple.m4a-audio(.m4a)
- public.mpeg-4(.mp4)
- com.apple.m4v-video(.m4v)
- org.3gpp.adaptive-multi-rate-audio(.amr)
- com.microsoft.waveform-audio(.wav)
- public.aiff-audio(.aiff)
- public.aifc-audio (.aifc)
- com.apple.coreaudio-format(.caf)
- com.apple.quicktime-movie (.mov)
- com.apple.m4a-audio (.m4a)
- public.mpeg-4 (.mp4)
- com.apple.m4v-video (.m4v)
- org.3gpp.adaptive-multi-rate-audio (.amr)
- com.microsoft.waveform-audio (.wav)
- public.aiff-audio (.aiff)
- public.aifc-audio (.aifc)
- com.apple.coreaudio-format (.caf)
如果您不介意将音频数据的正确转码转换为其他格式,则您不必使用 AVAssetExportPresetPassthrough
预设。还有 AVAssetExportPresetLowQuality
, AVAssetExportPresetMediumQuality
和 AVAssetExportPresetHighestQuality
。在随后的示例代码中,输出网址的扩展名为 .m4a ,结果转码在iTunes和其他媒体播放器中播放:
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 also AVAssetExportPresetLowQuality
, AVAssetExportPresetMediumQuality
, and AVAssetExportPresetHighestQuality
. In the sample code that follows, the output URL has extension .m4a and the resulting transcode plays in iTunes and other media players:
AVAsset * asset = [AVAsset assetWithURL:inputURL];
AVAssetExportSession * exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
exportSession.outputFileType = AVFileTypeMPEG4;
exportSession.outputURL = outputURL;
exportSession.metadata = asset.metadata;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
if (exportSession.status == AVAssetExportSessionStatusCompleted)
{
NSLog(@"AV export succeeded.");
}
else if (exportSession.status == AVAssetExportSessionStatusCancelled)
{
NSLog(@"AV export cancelled.");
}
else
{
NSLog(@"AV export failed with error: %@ (%ld)", exportSession.error.localizedDescription, (long)exportSession.error.code);
}
}];
这篇关于如何使用AVAssetExportSession导出AVPlayer音频mp3文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!